假设我的表列包含以下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
也包含数字1
和2
。
我的问题是如何选择数字1
和2
包含在字符串中但不包含在2-3位数字中的所有行。我希望它严格匹配1
和2
答案 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')