RegEx从db中的select表中选择

时间:2014-12-11 23:25:12

标签: mysql regex

问题:

我有一张这样的表:

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或任何一位数时,就会出现问题。

结果示例1:

输入:MYNUMBER:24

结果:

A | B
-----------------------------------------
1 | 5,25,24,22,21,6,19,18,17,15,13,11

没关系。

结果示例2:

输入: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上试过我的表达,这是真的。

2 个答案:

答案 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$"