In MySQL Version 8.0.19, wie man Zeichenfolgen in Spalten aufteilt, da einige ältere Funktionen nicht verfügbar sind, wie z. B. Zeichenindex (), Zeichenfolge_split () [Duplikat]
Ich habe eine Zeile, die ich in Spalten aufteilen möchte. Der Spaltenname lautet beispielsweise Code. In der Zeile wird 01,04,07 für Produktartikel angezeigt.
Ich möchte die Produktartikel in Spalten aufteilen. Alle Vorschläge wären hilfreich, da ich die älteren Funktionen ausprobiert habe, aber festgestellt habe, dass die SQL-Version, an der ich arbeite, diese Optionen wie string_split und Zeichenindex nicht enthält. Ich habe verwendet instr()
und substring()
aber ein Käufer kann mehr oder weniger Artikel als oben gezeigt kaufen.
Antworten
Ihr unmittelbares Problem ist Ihr Design. Sie sollten nicht mehrere ganzzahlige Werte in einer Zeichenfolgenspalte speichern. Jedes Tupel von Werten sollte in einer separaten Zeile gespeichert werden.
Was Ihre Frage betrifft: In der aktuellen MySQL-Version ist JSON eine Option. Es kann einfacher sein, die Werte in Zeilen anstatt in Spalten zu setzen. Hier ist eine Möglichkeit, dies zu tun:
select t.*, x.*
from mytable t
cross join lateral json_table(
concat('[', t.code, ']'),
'$[*]' columns (rn for ordinality, code_part int path '$')
) x
Wenn Sie die Ergebnisse als Spalten wünschen, ist eine Option die bedingte Aggregation. Sie müssen so viele Spalten wie nötig auflisten:
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"