2016-02-14 109 views
1

我在MySQL数据库中的字符串中存储了各种数字,即“5,15,21”。 如果我搜索数字“5”,我希望脚本向我显示该行,但不包含其中有15个(当不存在“5”时)的行。这就是为什么我不想使用SELECT * FROM table WHERE cell LIKE '%5%'。 可以使用什么reg表达式来定位特定的数字。字符串中的数字正则表达式搜索

+1

如果可能的话,做**不**在同一领域存储多个值。数据标准化存在的原因。 –

+0

有没有在目标字段中有“1,5,15”,“5,10”,“5”,“1,12,15”这样的值? – RomanPerekhrest

+0

我用它来做我的DNA研究。该字段显示我与另一个人匹配的染色体。所以,如果我寻找与第5号染色体共享DNA的匹配,我只想展示那些。不是在15号染色体上共享DNA的人。但有时在多个染色体上有较大的匹配。这就是为什么我将它们存储在一个字段中,并用逗号分隔的原因。 – Leveller

回答

1

这里的替代正则表达式的解决方案:

SELECT * FROM table WHERE cell RLIKE '[[:<:]]5[[:>:]]' 

[[:<:]] & [[:>:]]字界限,WHI CH这里指5不会匹配,除非它是“独”(没有其它数量的部分),无论是现在的位置

+1

工程很好,这就是我所追求的解决方案。谢谢! – Leveller

2

你应该使用逗号分隔符为5之间做区分,和第5的第15部分:

SELECT * FROM table WHERE concat(',' , cell, ',') LIKE '%,5,%' 

concat()用于处理案件5是在列表中的第一个或最后一个

+0

有些行只有一个数字,没有逗号 – Leveller

+0

@Leveller - 它也可以工作在'5'这样的行上,concat处理它 –

0
mysql> SELECT FIND_IN_SET('5', '1,5,15'), FIND_IN_SET('5', '15,25'); 
+----------------------------+---------------------------+ 
| FIND_IN_SET('5', '1,5,15') | FIND_IN_SET('5', '15,25') | 
+----------------------------+---------------------------+ 
|       2 |       0 | 
+----------------------------+---------------------------+ 
相关问题