跳到主要内容

FIND_IN_SET

描述

返回字符串 str 在以逗号分隔的字符串列表 strlist 中第一次出现的位置(从 1 开始计数)。该函数按照 MySQL 兼容模式实现,用于在逗号分隔的值列表中查找特定字符串。

语法

FIND_IN_SET(<str>, <strlist>)

参数

参数说明
<str>需要查找的目标字符串。类型:VARCHAR
<strlist>用逗号分隔的字符串列表,在其中查找 str。类型:VARCHAR

返回值

返回 INT 类型,表示 str 在 strlist 中的位置(从 1 开始计数)。

查找规则:

  • 完全匹配:只有当 str 完全匹配 strlist 中的某个子字符串时才返回位置
  • 位置从 1 开始计数
  • 返回第一次匹配的位置

特殊情况:

  • 如果 str 为空字符串,返回 0
  • 如果 strlist 为空字符串,返回 0
  • 如果没有找到匹配项,返回 0
  • 如果任一参数为 NULL,返回 NULL
  • 如果 str 包含逗号,将无法正确匹配(因为逗号是分隔符)
  • 匹配是大小写敏感的

示例

  1. 基本查找
SELECT FIND_IN_SET('b', 'a,b,c');
+---------------------------+
| FIND_IN_SET('b', 'a,b,c') |
+---------------------------+
| 2 |
+---------------------------+
  1. 查找第一个元素
SELECT FIND_IN_SET('apple', 'apple,banana,cherry');
+------------------------------------------+
| FIND_IN_SET('apple', 'apple,banana,cherry') |
+------------------------------------------+
| 1 |
+------------------------------------------+
  1. 查找最后一个元素
SELECT FIND_IN_SET('cherry', 'apple,banana,cherry');
+-------------------------------------------+
| FIND_IN_SET('cherry', 'apple,banana,cherry') |
+-------------------------------------------+
| 3 |
+-------------------------------------------+
  1. 未找到匹配项
SELECT FIND_IN_SET('orange', 'apple,banana,cherry');
+--------------------------------------------+
| FIND_IN_SET('orange', 'apple,banana,cherry') |
+--------------------------------------------+
| 0 |
+--------------------------------------------+
  1. NULL 值处理
SELECT FIND_IN_SET(NULL, 'a,b,c'), FIND_IN_SET('b', NULL);
+---------------------------+-------------------------+
| FIND_IN_SET(NULL, 'a,b,c') | FIND_IN_SET('b', NULL) |
+---------------------------+-------------------------+
| NULL | NULL |
+---------------------------+-------------------------+
  1. 空字符串处理
SELECT FIND_IN_SET('', 'a,b,c'), FIND_IN_SET('a', '');
+-------------------------+-----------------------+
| FIND_IN_SET('', 'a,b,c') | FIND_IN_SET('a', '') |
+-------------------------+-----------------------+
| 0 | 0 |
+-------------------------+-----------------------+
  1. 包含逗号的字符串(无法正确匹配)
SELECT FIND_IN_SET('a,b', 'a,b,c,d');
+------------------------------+
| FIND_IN_SET('a,b', 'a,b,c,d') |
+------------------------------+
| 0 |
+------------------------------+
  1. 大小写敏感匹配
SELECT FIND_IN_SET('B', 'a,b,c'), FIND_IN_SET('b', 'A,B,C');
+---------------------------+---------------------------+
| FIND_IN_SET('B', 'a,b,c') | FIND_IN_SET('b', 'A,B,C') |
+---------------------------+---------------------------+
| 0 | 0 |
+---------------------------+---------------------------+
  1. 部分匹配不会成功
SELECT FIND_IN_SET('ap', 'apple,banana,cherry');
+---------------------------------------+
| FIND_IN_SET('ap', 'apple,banana,cherry') |
+---------------------------------------+
| 0 |
+---------------------------------------+
  1. 数字字符串查找
SELECT FIND_IN_SET('2', '1,2,3,10,20');
+--------------------------------+
| FIND_IN_SET('2', '1,2,3,10,20') |
+--------------------------------+
| 2 |
+--------------------------------+