ホームページ >データベース >mysql チュートリアル >MySQL でカンマ区切り値を行に分割するにはどうすればよいですか?
MySQL でのカンマ区切りデータの変換
このガイドでは、MySQL 列内のカンマ区切り値を個々の行に効率的に変換する方法について説明します。 MySQL 関数と賢いテクニックを活用します:
数値シーケンスの作成: まず、一連の整数を含む一時テーブルを生成します (または既存のテーブルを使用します)。このシーケンスは、ターゲット列内のカンマ区切り値の最大数より大きくなければなりません。 この配列は、個々の値を抽出するためのインデックスとして機能します。
SUBSTRING_INDEX
の活用: ここでは SUBSTRING_INDEX
関数が重要です。区切り文字と指定された出現箇所に基づいて部分文字列を抽出します。数値シーケンスと組み合わせてこれを 2 回使用して、各値を分離します。
このアプローチを説明する例を次に示します:
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) AS value FROM table1 t CROSS JOIN (SELECT a.N + b.N * 10 + c.N * 100 AS n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
説明:
SELECT
ステートメントは、数値シーケンスを作成します (データに必要に応じて調整します)。CROSS JOIN
は、このシーケンスをテーブル (table1
) と結合します。SUBSTRING_INDEX(t.values, ',', n.n)
は、n 番目のコンマまでの部分文字列を抽出します。SUBSTRING_INDEX(..., ',', -1)
は、前の結果から文字列の末尾までの値を抽出します。WHERE
句により、カンマ区切りの文字列の範囲内の値のみを処理することが保証されます。 条件 LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) 1
は値の数を動的に計算します。この方法は、カンマ区切りの値を個々の行に効果的に分割し、MySQL でのデータ操作のためのクリーンで効率的なソリューションを提供します。 table1
と values
を実際のテーブル名と列名に置き換えてください。
以上がMySQL でカンマ区切り値を行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。