我对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)
返回空集!!! 为什么呢?
答案 0 :(得分:1)
您无法使用find_in_set
函数搜索其中包含逗号的字符串'a,b'
,但仅适用于以a
或b
逗号分隔的任何字符串或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
中,则返回strlist
到N
范围内的值。字符串列表是由以“,”
个字符分隔的子字符串组成的字符串。
它的第二个参数是一个包含以逗号分隔的值的字符串。您传递给FIND_IN_SET()
的值(类型为set_col
的列SET
)与此描述相符。但是,它的第一个参数应该只是列表中包含的值之一。 a,b
不是作为第一个参数传递给FIND_IN_SET()
的有效值,因为它包含值a
和b
。如果您希望找到某些内容,则应将'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;