Find_in_set返回一个空集?

时间:2016-03-14 13:27:57

标签: mysql find-in-set

我对find_in_set中的集类型有疑问 这是代码:

create table set_test(id int,set_col SET('a','b','c','d'));
insert into set_test(id,set_col) values(1,'a,b'),(2,'a,b,b');
select * from set_test where find_in_set('a,b',set_col)

返回空集!!! 为什么呢?

3 个答案:

答案 0 :(得分:1)

您无法使用find_in_set函数搜索其中包含逗号的字符串'a,b',但仅适用于以ab逗号分隔的任何字符串或c,所以如果您尝试这将正常工作:

select * from set_test where find_in_set('a',set_col); 

但在您的情况下,您可以使用like

select * from set_test where set_col like '%a,b%';

答案 1 :(得分:0)

函数FIND_IN_SET()的文档:

  

FIND_IN_SET(str,strlist)

     

如果字符串1位于由N子字符串组成的字符串列表str中,则返回strlistN范围内的值。字符串列表是由以“,”个字符分隔的子字符串组成的字符串。

它的第二个参数是一个包含以逗号分隔的值的字符串。您传递给FIND_IN_SET()的值(类型为set_col的列SET)与此描述相符。但是,它的第一个参数应该只是列表中包含的值之一。 a,b不是作为第一个参数传递给FIND_IN_SET()的有效值,因为它包含值ab。如果您希望找到某些内容,则应将'a''b'传递给它。

该段末尾还记载了这一点:

  

如果第一个参数包含逗号(“,”)字符,则此函数无法正常工作。

答案 2 :(得分:0)

find_in_set函数返回搜索结果的数值,如果未找到,则返回0。

你应该改变: select * from set_test where find_in_set('a,b',set_col);

要: select * from set_test where find_in_set('a,b',set_col)> 0;