Перейти к содержимому
Последнее обновление

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 |
+--------------------------------+