从列中选择可能包含更多单词的第一个单词

时间:2013-01-26 16:43:51

标签: mysql

假设我有table这么简单:

id    |    name
1     |    one_word
2     |    two words
3     |    here we have four

所以,我想只获得包含一个单词的行,在上面的示例中只会记录身份2

我做了read the docs并尝试了各种版本:

SELECT * FROM `table` WHERE name REGEXP '(.*?)\s'; 

所以,请告诉我,我做错了。

3 个答案:

答案 0 :(得分:0)

对于Strawberry的评论,我想出了这个:

SELECT * FROM `table` WHERE name NOT REGEXP '\s'

效果很好。

答案 1 :(得分:0)

这个怎么样?在LIKE '% %'REGEXP案例中,表现都不好。但我认为LIKE表现最差。

SELECT * FROM `table` WHERE name NOT LIKE '% %'

答案 2 :(得分:0)

如果您要查找可能包含更多字词的列中的第一个字词,则可以使用SUBSTRING_INDEX

SELECT SUBSTRING_INDEX("here we have four", " ", 1)

提取没有空格的行,您可以使用例如:

  • name NOT REGEXP '\s'
  • name NOT LIKE '% %'
  • LOCATE(' ', name) = 0

如果您的列可以在字符串的开头或结尾包含空格,您还可以使用TRIM

SELECT SUBSTRING_INDEX(TRIM("  here we have four  "), " ", 1)
  • TRIM(name) NOT REGEXP '\s'
  • TRIM(name) NOT LIKE '% %'
  • LOCATE(' ', TRIM(name)) = 0