匹配一个或多个空间的Mysql

匹配一个或多个空间的Mysql,mysql,substring,Mysql,Substring,我有一个名为“matches”的字符串列,其中包含如下数据: 054T,Arequipa,Peru 我使用查询来提取子字符串,例如提取第一个出现的术语: SUBSTRING_INDEX(matches, ',', 1) 成功返回054T。现在的问题是,我有一个或多个空格分隔的数据: 054T Arequipa Peru 以及: 如果不返回054T,一个或多个空间的类似正则表达式的dilimiter是什么 谢谢这应该可以做到: SELECT LEFT(matches, LOCA

我有一个名为“matches”的字符串列,其中包含如下数据:

054T,Arequipa,Peru
我使用查询来提取子字符串,例如提取第一个出现的术语:

SUBSTRING_INDEX(matches, ',', 1)
成功返回054T。现在的问题是,我有一个或多个空格分隔的数据:

054T     Arequipa    Peru
以及:

如果不返回054T,一个或多个空间的类似正则表达式的dilimiter是什么


谢谢

这应该可以做到:

SELECT LEFT(matches, LOCATE(' ', matches) - 1);
LOCATE
返回第一个空格符号的索引(基于1),使用
LEFT
只需从字符串左侧获取该数量的符号即可

当代码段中没有空格时,该代码段将返回值本身:

SELECT IF(
  LOCATE(' ', matches) != 0, 
  LEFT(matches, LOCATE(' ', matches) - 1), 
  matches
);

如您所述,如果同时存在空格和制表符,只需相应地准备字符串:

SELECT LEFT(matches, LOCATE(' ', REPLACE(matches, '\t', ' ')) - 1);
我仍然在想,你能不能把它正常化:

UPDATE your_table SET matches = REPLACE(matches, '\t', REPEAT(' ', 4));

。。。或者,也许更好,把它移到另一个表中(因为它现在看起来真的像一个伪装的集合)。

这很好,但现在我看到一个例子,不仅出现了多个空格,而且出现了一个制表符“\t”,这两种情况下都适用,空格和/或制表符。叹气。。。你确定不应该只是规范化你的数据吗?将更新我的答案。我可以正常化,有1300万行,如果你能帮助我,我会很高兴的。
UPDATE your_table SET matches = REPLACE(matches, '\t', REPEAT(' ', 4));