使用REGEX在空格分隔列表中查找数字

时间:2013-12-29 10:36:07

标签: mysql sql regex

我正在编写一个SQL查询来选择行,其中一个空格分隔数字的字段包含一个数字,在本例中为1。

示例字段:

  • "1 2 3 4 5 11 12 21" - 匹配,包含第一个
  • "2 3 4 6 11 101" - 不匹配,不包含第一个

目前为止最好的查询是:

$sql = "SELECT * from " . $table . " WHERE brands REGEXP '[/^1$/]' ORDER BY name ASC;";

问题是这个REGEXP还找到了11匹配

我在其他帖子上阅读了很多建议,例如[\d]{1},但结果总是一样的。 是否有可能实现我想要的,以及如何实现?

3 个答案:

答案 0 :(得分:4)

您不需要正则表达式:如果您在列的正面和背面添加空格,则可以使用LIKE

SELECT * from $table
WHERE CONCAT(' ', brands, ' ') LIKE '% 1 %'
ORDER BY name

答案 1 :(得分:3)

尝试:

WHERE brands REGEXP '[[:<:]]1[[:>:]]'

[[:<:]][[:>:]]匹配单词前后的单词边界。

答案 2 :(得分:2)

为什么不FIND_IN_SET() + REPLACE()

SELECT 
    *
FROM
    `table`
WHERE
    FIND_IN_SET(1, REPLACE(`brands`, ' ', ','))
ORDER BY
    `name` ASC;