В MySQL версии 8.0.19 как разбить строку на столбцы, поскольку некоторые старые функции недоступны, например, index (), string_split () [дубликат]
У меня есть одна строка, которую я хотел бы разбить на столбцы, например, имя столбца - это Код, а строка показывает 01,04,07 для элементов продукта.
Я хочу разбить товары на столбцы. Любые предложения были бы полезны, поскольку я пробовал более старые функции, но понял, что версия SQL, над которой я работаю, не имеет таких параметров, как string_split и символьный индекс. Я использовал instr()
и , substring()
но покупатель может приобрести более или менее элементов , чем указано выше.
Ответы
Ваша непосредственная проблема - это ваш дизайн. Вы не должны хранить несколько целочисленных значений в строковом столбце. Каждый кортеж значений должен храниться в отдельной строке.
Что касается вашего вопроса: в последней версии MySQL вариант - JSON. Может быть удобнее помещать значения в строки, а не в столбцы. Вот один из способов сделать это:
select t.*, x.*
from mytable t
cross join lateral json_table(
concat('[', t.code, ']'),
'$[*]' columns (rn for ordinality, code_part int path '$')
) x
Если вы хотите, чтобы результаты были в виде столбцов, тогда одним из вариантов является условное агрегирование; вам нужно пронумеровать столько столбцов, сколько необходимо:
select t.*,
max(case when x.rn = 1 then x.code_part end) as code_part_1,
max(case when x.rn = 2 then x.code_part end) as code_part_2,
...
from mytable t
cross join lateral json_table(
concat('[', t.code, ']'),
'$[*]' columns (rn for ordinality, code_part int path '$')
) x
group by t.id -- assuming that "id" is the primary key of "mytable"