SQL でのカンマ区切りの行値の分割
データベース管理では、データがカンマ区切り値 (CSV) として保存されることがよくあります。ただし、分析やレポートの目的によっては、これらの CSV を個別の行に分割することが必要になる場合があります。この記事では、この分割操作を実行するための SQL ベースのアプローチについて説明します。
この解決策には、MySQL の SUBSTRING_INDEX() 関数を利用することが含まれます。この関数を使用すると、区切り文字に基づいて、指定された文字列から部分文字列を抽出できます。また、カウント テーブルとのクロス結合を使用して、CSV を分割するための行インデックスとして使用される一連の数値を生成します。
次は SQL クエリです:
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 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 ORDER BY n ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
このクエリは、table1
テーブルの values
列の CSV 値を効果的に分割し、値ごとに新しい行を作成します。カウント テーブルでは、複数の値を 1 行に分割できます。
データと出力の例:
table1
テーブルの次のデータについて考えてみましょう:
values |
---|
somethingA,somethingB,somethingC |
somethingElseA, somethingElseB |
このデータにクエリを適用すると、次の出力が生成されます:
value |
---|
somethingA |
somethingB |
somethingC |
somethingElseA |
somethingElseB |
このテクノロジーを活用すると、CSV 形式で保存されたデータを個別の行に簡単に分割できるため、さらなる分析や処理が可能になります。
以上がSQL のカンマ区切り値を別々の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。