ホームページ >データベース >mysql チュートリアル >MySQL でカンマ区切り値を行に分割するにはどうすればよいですか?

MySQL でカンマ区切り値を行に分割するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-14 09:21:11684ブラウズ

How to Split Comma-Separated Values into Rows in MySQL?

MySQL でのカンマ区切りデータの変換

このガイドでは、MySQL 列内のカンマ区切り値を個々の行に効率的に変換する方法について説明します。 MySQL 関数と賢いテクニックを活用します:

  1. 数値シーケンスの作成: まず、一連の整数を含む一時テーブルを生成します (または既存のテーブルを使用します)。このシーケンスは、ターゲット列内のカンマ区切り値の最大数より大きくなければなりません。 この配列は、個々の値を抽出するためのインデックスとして機能します。

  2. 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 でのデータ操作のためのクリーンで効率的なソリューションを提供します。 table1values を実際のテーブル名と列名に置き換えてください。

以上がMySQL でカンマ区切り値を行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。