我有一个名为“匹配”的字符串列,其数据如下:
054T,Arequipa,Peru
我正在使用查询来提取子字符串,例如提取第一个出现的术语:
SUBSTRING_INDEX(matches, ',', 1)
成功返回054T。现在的问题是我有一个由一个或多个空格分隔的数据:
054T Arequipa Peru
和
SUBSTRING_INDEX(matches, ' ', 1)
不会返回054T,对于一个或多个空格会是什么样的正则表达式?
由于
答案 0 :(得分: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));
...或者,或许更好,只需将其移动到另一个表中(因为它实际上看起来像是伪装的一套)。