假设我有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';
所以,请告诉我,我做错了。
答案 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