0

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

054T,Arequipa,Peru

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

SUBSTRING_INDEX(matches, ',', 1)

成功返回 054T。现在的问题是我的数据由一个或多个空格分隔:

054T     Arequipa    Peru

和:

SUBSTRING_INDEX(matches, ' ', 1)

不返回 054T,一个或多个空格的正则表达式是什么?

谢谢

4

1 回答 1

1

这应该可以解决问题:

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));

...或者,也许更好,只是把它移到另一张桌子上(因为它现在看起来真的像是一个伪装的集合)。

于 2013-06-03T21:14:30.267 回答