ホームページ >データベース >mysql チュートリアル >SQL でカンマ区切りの値を複数の行に分割するにはどうすればよいですか?
SQL で値を複数の行に分割する
データ処理における一般的なタスクの 1 つは、次のように、カンマ区切りの文字列を複数の行に分割することです。以下に例示されるrequest:
問題:
コンマ区切り値を含む id 列と name 列を持つテーブルが指定された場合、次の形式でデータを返します:
id | name |
---|---|
1 | a |
1 | b |
1 | c |
2 | b |
解決策:
これを達成するには、 MySQL の SUBSTRING_INDEX 関数を、分割するフィールドの最大数までの一連の数値を含む数値テーブルと組み合わせて利用できます。以下のクエリは、このアプローチを示しています。
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
数値テーブルの作成が不可能な場合は、次のクエリを使用して、クエリ自体内で一連の数値を生成できます。
SELECT tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) AS name FROM ( SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS numbers INNER JOIN tablename ON CHAR_LENGTH(tablename.name) - CHAR_LENGTH(REPLACE(tablename.name, ',', '')) >= numbers.n - 1 ORDER BY id, n
デモ:
[SQL フィドルデモ](https://www.sqlfiddle.com/#!5/cf4386/1)
以上がSQL でカンマ区切りの値を複数の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。