0

可以说我有一个table简单的:

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

所以,我想只获取包含一个单词的行,在上面的示例中,它只会记录为 id 2

我确实阅读了文档并尝试了各种版本:

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

所以,请告诉我我在哪里做错了。

4

3 回答 3

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
于 2013-01-26T16:59:38.023 回答
0

感谢草莓的评论,我想出了这个:

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

效果很好。

于 2013-01-26T16:52:16.503 回答
0

那这个呢?在这两种情况下LIKE '% %'REGEXP性能都很差。但我认为LIKE表现最差。

SELECT * FROM `table` WHERE name NOT LIKE '% %'
于 2013-01-26T16:55:02.800 回答