FIND_IN_SET

说明

如果字符串str在由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值或记录。

如果str不在strlist中或strlist为空字符串,则返回0。

语法

find_in_set ::=

参数

text_expression1

要查询的字符串

text_expression_list

给定的表达式列表或者字段名,参数以”,”分隔

如果任一参数为NULL,则返回NULL。 如果第一个参数包含逗号(,)字符,则此函数将无法正常工作。

返回值

如果第一个参数是常量字符串,第二个参数是SET类型的列,则将FIND_IN_SET()函数优化为使用位算术。 如果str不在strlist中或strlist为空字符串,则返回0。

示例

示例: 测试 FIND_IN_SET()功能的用例

--指定两个字符串常量

SELECT FIND_IN_SET('a','b,c,a,d');
FIND_IN_SET(bigint)      |
-------------------------
3                        |
总数目:1

SELECT FIND_IN_SET('a,','b,a,,c,d');
FIND_IN_SET(bigint)      |
-------------------------
0                        |
总数目:1

SELECT FIND_IN_SET('a','');
FIND_IN_SET(bigint)      |
-------------------------
0                        |
总数目:1

SELECT FIND_IN_SET('','a,,b');
FIND_IN_SET(bigint)      |
-------------------------
2                        |
总数目:1

SELECT FIND_IN_SET('a',NULL);
FIND_IN_SET(bigint)      |
-------------------------
null                     |
总数目:1

SELECT FIND_IN_SET('',',abc');
FIND_IN_SET(bigint)      |
-------------------------
1                        |
总数目:1

SELECT FIND_IN_SET('a',',a,b,c');
FIND_IN_SET(bigint)      |
-------------------------
2                        |
总数目:1

SELECT FIND_IN_SET(NULL,'a,d,b');
FIND_IN_SET(bigint)      |
-------------------------
null                     |
总数目:1

SELECT FIND_IN_SET('中国','zhong国,中guo,中国');
FIND_IN_SET(bigint)      |
-------------------------
3                        |
总数目:1


--创建测试表,测试find_in_set函数表现

DROP TABLE DIVISIONS;
create table divisions(id int auto_increment primary key, name varchar(25) not null, belts varchar(200) not null);
insert into divisions(name,belts) values ('0-1','white,yellow,orange'),
('0-2','purple,green,blue'),
('0-3','brown,red,black'),
('0-4','white,yellow,orange'),
('0-5','purple,green,blue'),
('0-6','brown,red'),
('0-7','black'),
('0-8','white,yellow,orange'),
('0-9','purple,green,blue'),
('0-10','brown,red');


select * from divisions where find_in_set('red',belts)>0 order by id;
ID(int)      |NAME(varchar)      |BELTS(varchar)      |
----------------------------------------------------
3            |0-3                |brown,red,black     |
----------------------------------------------------
6            |0-6                |brown,red           |
----------------------------------------------------
10           |0-10               |brown,red           |
总数目:3


/**************************环境清除***********************************/
DROP TABLE DIVISIONS CASCADE;