Последнее обновление
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 содержит запятую, корректное сопоставление невозможно (поскольку запятая служит разделителем)
- При сопоставлении учитывается регистр
Примеры
- Базовый поиск
SELECT FIND_IN_SET('b', 'a,b,c');
+---------------------------+
| FIND_IN_SET('b', 'a,b,c') |
+---------------------------+
| 2 |
+---------------------------+
- Поиск первого элемента
SELECT FIND_IN_SET('apple', 'apple,banana,cherry');
+------------------------------------------+
| FIND_IN_SET('apple', 'apple,banana,cherry') |
+------------------------------------------+
| 1 |
+------------------------------------------+
- Поиск последнего элемента
SELECT FIND_IN_SET('cherry', 'apple,banana,cherry');
+-------------------------------------------+
| FIND_IN_SET('cherry', 'apple,banana,cherry') |
+-------------------------------------------+
| 3 |
+-------------------------------------------+
- Совпадение не найдено
SELECT FIND_IN_SET('orange', 'apple,banana,cherry');
+--------------------------------------------+
| FIND_IN_SET('orange', 'apple,banana,cherry') |
+--------------------------------------------+
| 0 |
+--------------------------------------------+
- Обработка значений 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 |
+---------------------------+-------------------------+
- Обработка пустых строк
SELECT FIND_IN_SET('', 'a,b,c'), FIND_IN_SET('a', '');
+-------------------------+-----------------------+
| FIND_IN_SET('', 'a,b,c') | FIND_IN_SET('a', '') |
+-------------------------+-----------------------+
| 0 | 0 |
+-------------------------+-----------------------+
- Строка, содержащая запятую (корректное сопоставление невозможно)
SELECT FIND_IN_SET('a,b', 'a,b,c,d');
+------------------------------+
| FIND_IN_SET('a,b', 'a,b,c,d') |
+------------------------------+
| 0 |
+------------------------------+
- Сопоставление с учётом регистра
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 |
+---------------------------+---------------------------+
- Частичное совпадение не считается успешным
SELECT FIND_IN_SET('ap', 'apple,banana,cherry');
+---------------------------------------+
| FIND_IN_SET('ap', 'apple,banana,cherry') |
+---------------------------------------+
| 0 |
+---------------------------------------+
- Поиск числовой строки
SELECT FIND_IN_SET('2', '1,2,3,10,20');
+--------------------------------+
| FIND_IN_SET('2', '1,2,3,10,20') |
+--------------------------------+
| 2 |
+--------------------------------+