SQL でのカンマ区切りの行の分割
SQL では、カンマ区切りの値を含む列を個々の行に分割する必要があるシナリオが発生することがあります。これは、純粋な SQL クエリや外部ツールなど、さまざまな手法を通じて実現できます。
純粋な SQL でカンマ区切りの行を分割する効率的な方法は、SUBSTRING_INDEX()
関数と CROSS JOIN
関数を組み合わせて使用することです。 SUBSTRING_INDEX()
関数は、指定された区切り文字と位置に基づいて、指定された文字列から部分文字列を抽出します。 CROSS JOIN
関数は、異なるテーブルの複数の行を乗算し、デカルト積を作成します。
これらの関数を使用すると、一連の数値を生成し、それを反復処理できます。各数値について、SUBSTRING_INDEX()
関数を使用して、ソース列から目的のカンマ区切りの値を抽出できます。クエリの例は次のとおりです:
<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>
このクエリは、1 から 100 までの一連の数値を作成し、それを反復処理して各ソース行からカンマ区切りの値を抽出します。 SUBSTRING_INDEX()
関数は、シーケンス内の数値の位置に基づいて目的の値を抽出するために使用されます。 WHERE
句により、既存のカンマ区切り値のみが抽出されるようになり、範囲外エラーが回避されます。
あるいは、永続的なカウント テーブルを使用して数値シーケンスを生成し、クエリを簡素化することもできます。結果のクエリは上記のクエリと似ていますが、サブクエリはカウント テーブルへの参照に置き換えられます。
これらの手法を組み合わせることで、複雑なクエリや外部ツールを必要とせずに、SQL でカンマ区切りの行を分割できるようになります。方法の選択は、アプリケーションの特定の要件とパフォーマンスの考慮事項によって異なります。
以上がSQL でカンマ区切りの行を分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。