我有一张这样的表:
A | B
-----------------------------------------
1 | 5,25,24,22,21,6,19,18,17,15,13,11
2 | 25,15,17,4,33,12,34,40,24,5,1,26,43,9
3 | 25,15,11,36,29
我需要选择我的号码在B列的行。
我使用RegEx。我写这段代码:
SELECT *
FROM `table`
WHERE `B` REGEXP "([^\d]|^)MYNUMBER[^\d]
和RLIKE
([^ \ d] | ^)MYNUMBER [^ \ d]: ([^ \ d] | ^):不是数字或是第一个字符。 我的号码 [^ \ d]:不是数字
当MYNUMBER
为25或34或任何两位数时,我没有遇到任何问题。
但是当MYNUMBER
为5或1或任何一位数时,就会出现问题。
输入:MYNUMBER:24
结果:
A | B
-----------------------------------------
1 | 5,25,24,22,21,6,19,18,17,15,13,11
没关系。
输入:MYNUMBER:5
结果:
A | B
-----------------------------------------
1 | 5,25,24,22,21,6,19,18,17,15,13,11
2 | 25,15,17,4,33,12,34,40,24,5,1,26,43,9
3 | 25,15,11,36,29
错误的答案,第3行是错误的。
我在regexr.com上试过我的表达,这是真的。
答案 0 :(得分:1)
MySQL具有以下功能:FIND_IN_SET()
http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_find-in-set
从长远来看,您可能想要将其归纳为两个表......
答案 1 :(得分:1)
数字必须是一个连续的数字集,用逗号包围,或者是字符串中的第一个或最后一个数字。如果需要,您可以添加此选项以容忍可选的空格。
SELECT *
FROM `table`
WHERE `B` REGEXP "^25," OR `B` REGEXP ",25," OR `B` REGEXP ",25$"