如何在其中一列中选择具有特定数字的行?

时间:2013-03-25 09:14:56

标签: mysql sql string select

在我的表格的一列(比如它叫foo)中,它存储了一组10个数字,例如:

1, 5, 8, 3, 4, 6, 9, 7, 12, 15

我希望在6列中选择表格中foo的所有行。

嗯,你可能会说,这听起来很简单,只需在列上进行字符串搜索。但问题是,您还会选择其中包含16的行,因为16包含6

我还考虑过搜索, 6,,但我意识到如果6位于字符串的最后或前面,它将不匹配。

我该如何克服这个问题?

2 个答案:

答案 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, %'