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

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

DDD
リリース: 2025-01-14 09:25:43
オリジナル
309 人が閲覧しました

How to Split Comma-Separated Rows in SQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート