可以说我有一个table
简单的:
id | name
1 | one_word
2 | two words
3 | here we have four
所以,我想只获取包含一个单词的行,在上面的示例中,它只会记录为 id 2
。
我确实阅读了文档并尝试了各种版本:
SELECT * FROM `table` WHERE name REGEXP '(.*?)\s';
所以,请告诉我我在哪里做错了。
如果您要从可能有更多单词的列中查找第一个单词,则可以使用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
感谢草莓的评论,我想出了这个:
SELECT * FROM `table` WHERE name NOT REGEXP '\s'
效果很好。
那这个呢?在这两种情况下LIKE '% %'
,REGEXP
性能都很差。但我认为LIKE
表现最差。
SELECT * FROM `table` WHERE name NOT LIKE '% %'