MySQL FIND_IN_SET函数
简介:在本教程中,您将学习如何使用MySQL FIND_IN_SET()函数返回字符串在逗号分隔的字符串列表中的位置。
MySQL FIND_IN_SET()函数简介
MySQL提供了一个称为FIND_IN_SET()的内置字符串函数,该函数可让您在逗号分隔的字符串列表中查找字符串的位置。
下面说明了FIND_IN_SET函数的语法:
FIND_IN_SET(needle,haystack);
FIND_IN_SET函数接受两个参数:
第一个参数指针是您要查找的字符串。
第二个参数haystack是要搜索的以逗号分隔的字符串的列表。
FIND_IN_SET()函数根据参数值返回整数或NULL值:
如果needle或haystack均为NULL,则返回NULL值。
如果针不在干草堆中或干草堆是空字符串,则返回零。
如果针位于大海捞针中,则返回正整数。
请注意,如果针头包含逗号(,),该功能将无法正常工作。
另外,如果指针是一个常量字符串,而干草堆是一个SET类型的列,则MySQL将使用位算法优化。
MySQL FIND_IN_SET()示例
让我们举一些例子来了解MySQL FIND_IN_SET的工作原理。
A)MySQL FIND_IN_SET()函数简单示例
以下语句返回2,因为y在'x,y,z'字符串中位于第二个位置。
SELECT FIND_IN_SET('y','x,y,z'); -- 2
以下语句返回0,因为a不在" x,y,z"列表中。
SELECT FIND_IN_SET('a','x,y,z');
由于第二个参数为空,因此以下语句也返回0。
SELECT FIND_IN_SET('a','');
以下语句返回NULL,因为第一个参数为NULL。
SELECT FIND_IN_SET(NULL,'x,y,z');
以下语句还返回NULL,因为第二个参数为NULL。
SELECT FIND_IN_SET('a',NULL);
B)使用MySQL FIND_IN_SET()函数从表示例中查询数据
首先,使用以下语句创建一个名为divides的新表。
CREATE TABLE IF NOT EXISTS divisions ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(25) NOT NULL, belts VARCHAR(200) NOT NULL );
其次,将一些行插入细分表。
INSERT INTO divisions(name,belts) VALUES ('O-1','white,yellow,orange'), ('O-2','purple,green,blue'), ('O-3','brown,red,black'), ('O-4','white,yellow,orange'), ('O-5','purple,green,blue'), ('O-6','brown,red'), ('O-7','black'), ('O-8','white,yellow,orange'), ('O-9','purple,green,blue'), ('O-10','brown,red');
第三,要找到接受红色皮带的分区,可以使用FIND_IN_SET()函数,如以下查询所示:
SELECT name, belts FROM divisions WHERE FIND_IN_SET('red', belts);
取反FIND_IN_SET()函数
因为当在第二个参数中找不到第一个参数时,FIND_IN_SET()函数返回零(在MySQL中为FALSE)。
因此,可以使用NOT运算符取消FIND_IN_SET()函数。
本示例将NOT运算符与FIND_IN_SET()函数一起使用,以查找不接受黑带的分隔:
SELECT name, belts FROM divisions WHERE NOT FIND_IN_SET('black', belts);
MySQL FIND_IN_SET()函数与IN运算符
IN运算符确定一个值是否与集合中的任何值匹配。
下面的示例使用IN运算符查找名称为O-1或O-2的除法:
SELECT name, belts FROM divisions WHERE name IN ('O-1' , 'O-2');
该语句使用FIND_IN_SET()函数,并返回与上述查询相同的结果:
SELECT name, belts FROM divisions WHERE FIND_IN_SET(name, 'O-1,O-2');
因此,列IN(x,y,z)表达式与FIND_IN_SET(column,'x,y,z')相同。
IN运算符可以接受任意数量的参数,每个参数之间用逗号分隔,而FIND_IN_SET()函数只能采用两个参数。
当您要将一个值与列表中的任何值匹配时,可以使用IN运算符。
如果要将值与逗号分隔的值列表匹配,则可以使用FIND_IN_SET()函数。
在本教程中,您学习了如何使用MySQL FIND_IN_SET()函数在逗号分隔的字符串列表中查找字符串。