Первое, что нужно сказать, это то, что хранение списка значений в текстовых столбцах с разделителями во многих отношениях не является хорошим дизайном базы данных.Вы должны в основном переделать структуру базы данных или подготовиться к потенциальному миру боли.
Быстрое и грязное решение состоит в том, чтобы использовать таблицу чисел или встроенный запрос и перекрестно соединить ее с таблицей;REGEXP_SUBSTR()
(доступно в MySQL 8.0), позволяет выбрать конкретный экземпляр определенного шаблона.
Вот запрос, который извлечет до 10 значений из столбца:
SELECT
REGEXP_SUBSTR(t.val, '[^#]+', 1, numbers.n) name
FROM
mytable t
INNER JOIN (
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
) numbers
ON REGEXP_SUBSTR(t.val, '[^#]+', 1, numbers.n) IS NOT NULL
Regexp [^#]+
означает: столько последовательных символов, сколько возможно, кроме #
.
Ths демонстрация на DB Fiddle , когда задана входная строка'#name#user#user2#laugh#cry'
, возвращает:
| name |
| ----- |
| name |
| user |
| user2 |
| laugh |
| cry |