【问题标题】:Parsing underscore delimited fields in MySQL在 MySQL 中解析下划线分隔的字段
【发布时间】:2013-04-05 15:57:52
【问题描述】:

我有下表:

Patent      AssigneeName                        AssigneeUnparsed
-------     --------------                      ---------------
D452605     Louis Vuitton Malletier, S.A.       Paris_None_FR
D452606     Nike, Inc.                          Beaverton_OR_US
D452607     Salomon S.A.                        Metz-Tessy_None_FR

我已经搜索了该站点,但找不到任何关于如何解释将带下划线的字段解析为单独字段的具体内容。我想把AssigneeAddress字段解析成三个字段(AssigneeCity、AssigneeState、AssigneeCountry)

有人可以解释一下如何做到这一点或给我一个教程,以便我尝试弄清楚吗?

【问题讨论】:

  • 你看过MySQL字符串函数集吗?你的答案就在那里。 dev.mysql.com/doc/refman/5.5/en/string-functions.html
  • AssigneeAddress 总是由三个字段组成,或者可以有更多(或更少)?
  • 我的回答对你有用吗?只需使用 substring_index 进行更新,这应该会为您处理好。查找 substirng_index 以获取有关语法 SUBSTRING_INDEX(str, delim, count) 的更多信息。
  • fthiella,看起来是的,总是 2 个下划线给出“无”表示法。
  • 是的,它总是将 3 个字段合二为一......我继承了数据集,它很烦人

标签: mysql sql parsing mysql-workbench string-parsing


【解决方案1】:
select 
    substring_index('Beaverton_OR_US', '_', - 1) as AssigneeCity,
    substring_index(substring_index('Beaverton_OR_US', '_', 2),
            '_',
            - 1) as AssigneeState,
    substring_index('Beaverton_OR_US', '_', 1) as AssigneeCountry;

更新:

update tablename 
set 
    AssigneeCity = substring_index('Beaverton_OR_US', '_', - 1),
    AssigneeState = substring_index(substring_index('Beaverton_OR_US', '_', 2),
            '_',
            - 1),
    AssigneeCountry = substring_index('Beaverton_OR_US', '_', 1);

【讨论】:

  • 我在运行它时看到了它是如何工作的,但是对于我来说,用 200 万条记录执行此操作并将其插入到字段中的语法如何......或者这完全是一个不同的问题?
  • 无论是1条记录还是百万条记录,查询都是一样的。如果我做对了,您不是插入,而是更新记录。您必须做的只是“更新”操作。更新我的答案。
  • 不会只针对那条记录还是所有记录?
  • 它对表中的所有记录执行此操作。首先添加那些 Assignee(City, State, Country) 列,然后更新。如果您是 MySQL 新手,快速的 MySQL 介绍应该可以帮助您入门。 w3schools.com/sql
猜你喜欢
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多