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

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

Barbara Streisand
リリース: 2025-01-14 11:25:43
オリジナル
528 人が閲覧しました

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

SQL でのカンマ区切りの行の分割

質問:

SQL (MySQL) でカンマ区切りの値を含む列を別々の行に分割するにはどうすればよいですか?

答え:

MySQL には、カンマ区切りの行値を分割するための組み込み関数がありません。ただし、これを達成するには、数値のカウントと MySQL の 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>
ログイン後にコピー

このクエリは、SUBSTRING_INDEX() 関数を使用して、区切り文字としてカンマを指定し、分割位置として n 値を指定して個々の値を抽出します。カウント数値は、1 から 100 までの数値範囲を作成するサブクエリを使用して生成され、行ごとに最大 100 個の個別の値を分割できます。

永続的なカウント テーブル メソッドの場合は、次のクエリを使用します:

<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t
CROSS JOIN tally n
WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
ログイン後にコピー

カンマ区切りの値を含む多数の行を分割する必要がある場合、この方法の方がスケーラビリティが優れています。

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

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