Функция FIND_IN_SET
Функция FIND_IN_SET используется для поиска значения
в строке, содержащей список элементов, разделённых запятыми (CSV).
Если значение найдено, возвращается его позиция (начиная с 1),
в противном случае возвращается 0.
Синтаксис
SELECT FIND_IN_SET(search_value, csv_string) FROM table_name
Таблицы для примеров
| id | name | roles |
|---|---|---|
| 1 | Ivan | admin,editor |
| 2 | Olga | editor,author |
| 3 | Sergey | viewer |
| 4 | Anna | admin,author,editor |
Пример
Давайте определим позицию роли editor в списке ролей каждого пользователя:
SELECT name, roles,
FIND_IN_SET('editor', roles) AS role_position
FROM users
ORDER BY id
Результат выполнения кода:
| name | roles | role_position |
|---|---|---|
| Ivan | admin,editor | 2 |
| Olga | editor,author | 1 |
| Sergey | viewer | 0 |
| Anna | admin,author,editor | 3 |
Пример
Давайте выберем только тех пользователей, которые имеют роль admin:
SELECT id, name FROM users
WHERE FIND_IN_SET('admin', roles) > 0
ORDER BY id
Результат выполнения кода:
| id | name |
|---|---|
| 1 | Ivan |
| 4 | Anna |
Смотрите также
-
команду
IN,
которая проверяет значение в списке -
функцию
LOCATE,
которая ищет подстроку в строке -
функцию
SUBSTRING_INDEX,
которая выделяет часть строки по разделителю -
функцию
GROUP_CONCAT,
которая собирает значения в одну строку