MySQLバージョン8.0.19では、文字インデックス()、string_split()などの一部の古い関数を使用できないため、文字列を列に分割する方法[重複]
列に分割したい行が1つあります。たとえば、列名はCodeで、行は製品アイテムの01,04,07を示しています。
商品アイテムを列に分割したい。古い関数を試しましたが、作業中のSQLバージョンにはstring_splitや文字インデックスなどのオプションがないことに気付いたので、どんな提案も役に立ちます。私は使用instr()
しましたsubstring()
が、買い手は上記よりも多かれ少なかれアイテムを購入するかもしれません。
回答
1 GMB
あなたの当面の問題はあなたのデザインです。文字列列に複数の整数値を格納しないでください。値の各タプルは、別々の行に格納する必要があります。
あなたの質問に関して:最近のMySQLバージョンでは、オプションはJSONです。値を列ではなく行に配置する方が便利な場合があります。これを行う1つの方法は次のとおりです。
select t.*, x.*
from mytable t
cross join lateral json_table(
concat('[', t.code, ']'),
'$[*]' columns (rn for ordinality, code_part int path '$')
) x
結果を列として表示する場合、1つのオプションは条件付き集計です。必要な数の列を列挙する必要があります。
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"