No MySQL versão 8.0.19, como dividir string em colunas, pois algumas funções mais antigas não estão disponíveis, como índice de caracteres (), string_split () [duplicate]
Eu tenho uma linha que gostaria de dividir em colunas, por exemplo, o nome da coluna é Código com a linha mostrando 01,04,07 para itens de produtos.
Quero dividir os itens do produto em colunas. Qualquer sugestão seria útil, pois tentei as funções mais antigas, mas percebi que a versão SQL em que estou trabalhando não tem essas opções, como string_split e índice de caracteres. Eu usei instr()
e, substring()
mas um comprador pode comprar mais ou menos itens do que os mostrados acima.
Respostas
Seu problema imediato é seu design. Você não deve armazenar vários valores inteiros em uma coluna de string. Cada tupla de valores deve ser armazenada em uma linha separada.
Quanto à sua pergunta: na versão recente do MySQL, uma opção é JSON. Pode ser mais prático colocar os valores em linhas do que em colunas. Aqui está uma maneira de fazer isso:
select t.*, x.*
from mytable t
cross join lateral json_table(
concat('[', t.code, ']'),
'$[*]' columns (rn for ordinality, code_part int path '$')
) x
Se você quiser os resultados como colunas, uma opção é a agregação condicional; você precisa enumerar quantas colunas forem necessárias:
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"