在我的表格的一列(比如它叫foo
)中,它存储了一组10个数字,例如:
1, 5, 8, 3, 4, 6, 9, 7, 12, 15
我希望在6
列中选择表格中foo
的所有行。
嗯,你可能会说,这听起来很简单,只需在列上进行字符串搜索。但问题是,您还会选择其中包含16
的行,因为16
包含6
。
我还考虑过搜索, 6,
,但我意识到如果6
位于字符串的最后或前面,它将不匹配。
我该如何克服这个问题?
答案 0 :(得分:6)
使用名为FIND_IN_SET
的MySQL内置函数。
SELECT *
FROM tablename
WHERE FIND_IN_SET('6', REPLACE(foo,' ','')) > 0
来自文档:
如果字符串str在,则返回1到N范围内的值 字符串列表strlist由N个子串组成。字符串列表是 由“,”字符分隔的子串组成的字符串。如果 第一个参数是一个常量字符串,第二个参数是一个类型的列 SET,FIND_IN_SET()函数被优化为使用位运算。 如果str不在strlist中,或者strlist是空字符串,则返回0。 如果任一参数为NULL,则返回NULL。此功能不起作用 如果第一个参数包含逗号(“,”)字符,则正确。
答案 1 :(得分:3)
您可以在', '
的开头和结尾添加foo
并搜索:
SELECT *
FROM bar
WHERE ', ' + foo + ', ' LIKE '%, 6, %'