Dans MySQL version 8.0.19 comment diviser une chaîne en colonnes car certaines fonctions plus anciennes ne sont pas disponibles comme character index (), string_split () [duplicate]
J'ai une ligne que je voudrais diviser en colonnes par exemple, le nom de la colonne est Code avec la ligne indiquant 01,04,07 pour les articles de produit.
Je souhaite diviser les articles du produit en colonnes. Toutes les suggestions seraient utiles car j'ai essayé les anciennes fonctions, mais j'ai réalisé que la version SQL sur laquelle je travaille ne dispose pas de ces options telles que string_split et character index. J'ai utilisé instr()
et substring()
mais un acheteur peut acheter plus ou moins d'articles que ceux indiqués ci-dessus.
Réponses
Votre problème immédiat est votre conception. Vous ne devez pas stocker plusieurs valeurs entières dans une colonne de chaînes. Chaque tuple de valeurs doit être stocké sur une ligne distincte.
Quant à votre question: dans la version récente de MySQL, une option est JSON. Il peut être plus pratique de placer les valeurs en lignes plutôt qu'en colonnes. Voici une façon de le faire:
select t.*, x.*
from mytable t
cross join lateral json_table(
concat('[', t.code, ']'),
'$[*]' columns (rn for ordinality, code_part int path '$')
) x
Si vous voulez que les résultats sous forme de colonnes, une option est l'agrégation conditionnelle; vous devez énumérer autant de colonnes que nécessaire:
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"