我正在编写一个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}
,但结果总是一样的。
是否有可能实现我想要的,以及如何实现?
答案 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;