Mysql 文字列の分割
問題:
カンマを含む列を持つテーブルがあります- で区切られた値。これらの値を個別の行に分割し、各値を 1 つの行に対応させたいとします。
たとえば、次のテーブルがあるとします。
Col1 | col2 |
---|---|
1 | a,b,c |
2 | d,e |
次の行を抽出したいとします。
Col1 | col2 |
---|---|
1 | a |
1 | b |
1 | c |
2 | d |
2 | e |
解決策:
これは、 MySQL ストアド プロシージャ。次の SQL スクリプトには、ストアド プロシージャとそれが使用する関数の両方が含まれています。
DELIMITER $$ CREATE FUNCTION strSplit(x VARCHAR(65000), delim VARCHAR(12), pos INTEGER) RETURNS VARCHAR(65000) BEGIN DECLARE output VARCHAR(65000); SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos) , LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1) , delim , ''); IF output = '' THEN SET output = null; END IF; RETURN output; END $$ CREATE PROCEDURE BadTableToGoodTable() BEGIN DECLARE i INTEGER; SET i = 1; REPEAT INSERT INTO GoodTable (col1, col2) SELECT col1, strSplit(col2, ',', i) FROM BadTable WHERE strSplit(col2, ',', i) IS NOT NULL; SET i = i + 1; UNTIL ROW_COUNT() = 0 END REPEAT; END $$ DELIMITER ;
このストアド プロシージャを使用するには、次のクエリを実行できます。
CALL BadTableToGoodTable();
これにより、必要なデータを含む「GoodTable」という新しいテーブル。
以上がMySQL 列のカンマ区切り値を別々の行に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。