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

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

Mary-Kate Olsen
リリース: 2024-11-28 07:32:11
オリジナル
696 人が閲覧しました

How to Split Comma-Separated Values in a MySQL Column into Separate Rows?

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

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