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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-30 09:29:14770ブラウズ

How Can I Split Comma-Separated Values in a MySQL String Column into Multiple Rows?

Mysql 文字列の分割: カンマ区切りの値で行を展開

この質問では、ユーザーは、値を含むテーブルを変換する解決策を探しています。カンマ区切りの値を含む文字列列を、値をカンマで分割して、複数の行を含む新しいテーブルに追加します。この質問は既存のスレッドの完全な複製ではないと主張していますが、類似点はあります。

この要件に対処するには、ストアド プロシージャを使用できます。

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 ;

このストアド プロシージャは初期化されます。整数変数 i。 strSplit 関数を使用して、col2 列の各文字列値を反復処理し、位置 i にある対応する部分文字列を抽出します。抽出された部分文字列は、コンマ区切りの値の 1 つを表します。

この手順は、NULL 以外の部分文字列がなくなるまで、反復ごとに i を増分して続行されます。これにより、すべてのカンマ区切り値が分割されて新しいテーブルに挿入されます。

要約すると、このストアド プロシージャは、カンマ区切り値を含むテーブルを複数の行を含むテーブルに変換する堅牢なソリューションを提供します。データの操作と分析が簡単になります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。