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