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

MySQL でカンマ区切りの文字列から値を抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 14:01:11727ブラウズ

How to Extract Values from Comma-Separated Strings in MySQL?

カンマ区切り値からの MySQL 文字列の抽出

MySQL では、多くの場合、複数の値を含む文字列から個々の値を抽出する必要があります。カンマで区切ります。 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 ;

サンプルデータ:

Col1 Col2
1 a,b,c
2 d,e

結果:

Col1 Col2
1 a
1 b
1 c
2 d
2 e

使用法:

このソリューションを使用するには、元のデータを含む BadTable という名前のテーブルと、抽出された値を格納する GoodTable という新しいテーブルを作成します。次に、次のコマンドを実行します:

CALL BadTableToGoodTable();
SELECT * FROM GoodTable;

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

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