pgsql 的find_in_set

在 PostgreSQL 数据库中,有时候我们需求针对某个字段进行查找或者比较时,可以使用 find_in_set 函数。find_in_set 函数用来在一个逗号分隔的字符串列表中查找某个子串,并返回子串的位置。
语法
find_in_set(substring text, string text)
其中,substring 为要查找的子串,string 是被查找的逗号分隔字符串列表。
示例
接下来,我将演示一些示例代码,以便更好地理解 find_in_set 函数的用法。
示例1
假设有一个数据表 employees,其中有一个字段为 skills,存储着员工的技能集合。我们需要查找所有擅长 SQL 的员工,可以使用 find_in_set 函数进行查询。
SELECT * FROM employees
WHERE find_in_set('SQL', skills) > 0;
假设数据表 employees 中的示例数据如下:
| id | name | skills |
|---|---|---|
| 1 | Alice | Python, SQL |
| 2 | Bob | Java, C, SQL |
运行以上查询语句后,将返回 Bob 这条记录,因为他擅长 SQL。
示例2
另一个示例是,我们有一个数据表 students,其中一个字段为 hobbies,存储着学生的爱好。我们想要查找所有喜欢阅读和写作的学生。
SELECT * FROM students
WHERE find_in_set('Reading', hobbies) > 0
AND find_in_set('Writing', hobbies) > 0;
假设数据表 students 中示例数据如下:
| id | name | hobbies |
|---|---|---|
| 1 | Lucy | Reading, Dancing |
| 2 | John | Reading, Writing, Swimming |
运行以上查询语句后,将返回 John 这条记录,因为他喜欢阅读和写作。
示例3
除了上面的示例,我们还可以结合 CASE 语句和 find_in_set 函数,实现更复杂的逻辑。
SELECT name,
CASE
WHEN find_in_set('SQL', skills) > 0 THEN 'Good at SQL'
ELSE 'Not good at SQL'
END as sql_skill
FROM employees;
此查询将返回员工的姓名以及他们在 SQL 技能上的状况。
极客教程