В MySQL версии 8.0.19 как разбить строку на столбцы, поскольку некоторые старые функции недоступны, например, index (), string_split () [дубликат]

Dec 29 2020

У меня есть одна строка, которую я хотел бы разбить на столбцы, например, имя столбца - это Код, а строка показывает 01,04,07 для элементов продукта.

Я хочу разбить товары на столбцы. Любые предложения были бы полезны, поскольку я пробовал более старые функции, но понял, что версия SQL, над которой я работаю, не имеет таких параметров, как string_split и символьный индекс. Я использовал instr()и , substring()но покупатель может приобрести более или менее элементов , чем указано выше.

Ответы

1 GMB Dec 29 2020 at 05:15

Ваша непосредственная проблема - это ваш дизайн. Вы не должны хранить несколько целочисленных значений в строковом столбце. Каждый кортеж значений должен храниться в отдельной строке.

Что касается вашего вопроса: в последней версии 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"