Mysql选择与字符串中的数字匹配的所有内容

时间:2012-11-24 19:22:20

标签: mysql sql database wildcard

假设我的表列包含以下2个字符串行:

       1, 5, 2, 31, 12, 1212, 111
       21, 25, 32, 43, 112, 212, 311

我需要一个查询来选择包含数字1且包含数字2

的行

我的查询是:

      SELECT *
      FROM MyTable
      WHERE My_String LIKE '%1%' AND My_String LIKE '%2%'

现在,当我希望它只返回第一行时,它会返回两行。

选择第二行,因为数字21, 25, 32, 112, 212, 311也包含数字12

我的问题是如何选择数字12包含在字符串中但不包含在2-3位数字中的所有行。我希望它严格匹配12

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。 [[:&lt ;:]]是起始单词边界,[[:>:]]是结束单词边界。

SELECT * FROM MyTable
WHERE My_String RLIKE '[[:<:]]1[[:>:]]'
AND   My_String RLIKE '[[:<:]]2[[:>:]]'

答案 1 :(得分:1)

http://www.sqlfiddle.com/#!2/b082d/5

select * from testtable
where instr(concat(', ', longstring, ', '), ', 2,') >0;

select * from testtable
where instr(concat(', ', longstring, ', '), ', 1,') >0 
and  instr(concat(', ', longstring, ', '), ', 2,') >0;

答案 2 :(得分:0)

你几乎没有选择:

1-如主帖上的评论中所述,更改结构并且不存储连接字符串

2-编写一个分割字符串的函数,检查分割后数字1和2是否出现在标记中。

3-写“where”子句捕获字符串的每种可能性:    字符串可以出现在列表的开头,中间,末尾,也可以是列表中唯一的元素。最后一个并不重要,因为你需要1和2出现在一行中,因此应该删除包含单个元素的列表字符串。这样:

select *
from MyTable
where (My_String like '1,%'  or My_String like '%, 1,%' or My_String like '%, 1') 
and (My_String like '2,%'  or My_String like '%, 2,%' or My_String like '%, 2')