3

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

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

我希望选择我的表格中列中有数字的所有6foo

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

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

我该如何克服这个问题?

4

2 回答 2

6

使用名为FIND_IN_SET.

SELECT *
FROM   tablename
WHERE  FIND_IN_SET('6', REPLACE(foo,' ','')) > 0

从文档:

如果字符串 str 在由 N 个子字符串组成的字符串列表 strlist 中,则返回 1 到 N 范围内的值。字符串列表是由以“,”字符分隔的子字符串组成的字符串。如果第一个参数是一个常量字符串,而第二个参数是一个 SET 类型的列,则 FIND_IN_SET() 函数被优化为使用位算术。 如果 str 不在 strlist 中或 strlist 是空字符串,则返回 0。 如果任一参数为 NULL,则返回 NULL。如果第一个参数包含逗号 (“,”) 字符,此函数将无法正常工作。

于 2013-03-25T09:15:59.290 回答
3

', '您可以在开头和结尾附加 afoo并搜索:

SELECT *
FROM bar
WHERE ', ' + foo + ', ' LIKE '%, 6, %'
于 2013-03-25T09:18:46.970 回答