摘要:在本教程中,您将学习如何使用MySQL FIND_IN_SET()
函数返回字符串在逗号分隔的字符串列表中的位置。
MySQL FIND_IN_SET()
函数简介
MySQL 提供了一个名为FIND_IN_SET()
的内置字符串函数,它允许您在以逗号分隔的字符串列表中查找字符串的位置。
下面说明了FIND_IN_SET
函数的语法:
FIND_IN_SET(needle,haystack);
Code language: SQL (Structured Query Language) (sql)
FIND_IN_SET
函数接受两个参数:
- 第一个参数
needle
是您要查找的字符串。 - 第二个参数
haystack
是要搜索的以逗号分隔的字符串列表。
FIND_IN_SET()
函数根据参数的值返回一个整数或NULL
值:
- 如果
needle
或haystack
为 NULL,则返回NULL
值。 - 如果
needle
不在haystack
或者haystack
是空字符串,则返回零。 - 如果
needle
在haystack
中,则返回正整数。
请注意,如果needle
中包含逗号 (,),则该功能将无法正常工作。另外,如果needle
是常量字符串并且haystack
是SET
类型的列,MySQL将使用位算术优化。
MySQL FIND_IN_SET()
示例
让我们通过一些例子来了解MySQL FIND_IN_SET
是如何工作的。
一)MySQL FIND_IN_SET()
函数简单示例
以下语句返回 2,因为 y 位于'x,y,z'
字符串中的第二个位置。
SELECT FIND_IN_SET('y','x,y,z'); -- 2
Code language: SQL (Structured Query Language) (sql)
以下语句返回 0,因为a
不在'x,y,z'
列表中。
SELECT FIND_IN_SET('a','x,y,z');
Code language: SQL (Structured Query Language) (sql)
以下语句也返回 0,因为第二个参数为空。
SELECT FIND_IN_SET('a','');
Code language: SQL (Structured Query Language) (sql)
以下语句返回NULL
因为第一个参数是NULL
。
SELECT FIND_IN_SET(NULL,'x,y,z');
Code language: SQL (Structured Query Language) (sql)
以下语句也返回NULL
,因为第二个参数是NULL
。
SELECT FIND_IN_SET('a',NULL);
Code language: SQL (Structured Query Language) (sql)
B) 使用MySQL FIND_IN_SET()
函数从表中查询数据示例
首先,使用以下语句创建一个名为divisions
的新表。
CREATE TABLE IF NOT EXISTS divisions (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(25) NOT NULL,
belts VARCHAR(200) NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
其次,将一些行插入到divisions
表中。
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');
Code language: SQL (Structured Query Language) (sql)
第三,要查找接受red
带的分区,可以使用FIND_IN_SET()
函数,如以下查询所示:
SELECT
name,
belts
FROM
divisions
WHERE
FIND_IN_SET('red', belts);
Code language: SQL (Structured Query Language) (sql)
否定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);
Code language: SQL (Structured Query Language) (sql)
MySQL FIND_IN_SET()
函数与IN
运算符
IN
运算符确定某个值是否与集合中的任何值匹配。以下示例使用IN
运算符查找名称为O-1
或O-2
的部门:
SELECT
name, belts
FROM
divisions
WHERE
name IN ('O-1' , 'O-2');
Code language: SQL (Structured Query Language) (sql)
此语句使用FIND_IN_SET()
函数并返回与上述查询相同的结果:
SELECT
name,
belts
FROM
divisions
WHERE
FIND_IN_SET(name, 'O-1,O-2');
Code language: SQL (Structured Query Language) (sql)
因此column IN (x, y, z)
表达式与FIND_IN_SET(column, 'x,y,z')
相同。
IN
运算符可以采用任意数量的参数,每个参数用逗号分隔,而FIND_IN_SET()
函数只能采用两个参数。
当您想要将某个值与列表中的任何值进行匹配时,可以使用IN
运算符。当您想要将某个值与逗号分隔的值列表进行匹配时,可以使用FIND_IN_SET()
函数。
在本教程中,您学习了如何使用 MySQL FIND_IN_SET()
函数在逗号分隔的字符串列表中查找字符串。