ホームページ > データベース > mysql チュートリアル > MySQL で連結された文字列を個々の行に分割するにはどうすればよいですか?

MySQL で連結された文字列を個々の行に分割するにはどうすればよいですか?

DDD
リリース: 2024-12-14 03:15:09
オリジナル
872 人が閲覧しました

How to Split Concatenated Strings in MySQL into Individual Rows?

MySQL での連結文字列の分割

データベース テーブルを操作する場合、単一の列に単一の列に連結された複数の値が含まれるシナリオが発生することがあります。弦。 GROUP_CONCAT 関数は、複数の行を 1 つの文字列に結合する点では優れていますが、その逆の操作である、連結された文字列を個々の行に分割する操作は難しい場合があります。この操作は一般に文字列の展開または分解と呼ばれます。

問題ステートメント:

カンマを含む "colors" という名前の列を格納するテーブルが表示されます。色の分離されたリスト。目標は、各行が 1 つの色を表す形式にテーブルを再構築することです。

テーブルの例:

id colors
1 Red,Green,Blue
2 Orangered,Periwinkle

必要なテーブル形式:

id colors
1 Red
1 Green
1 Blue
2 Orangered
2 Periwinkle

解決策:

望ましい結果を達成するには、次の MySQL を使用できます。クエリ:

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) AS color
FROM
  colors
  INNER JOIN
  (SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) AS n
  ON LENGTH(REPLACE(colors, ',', '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit
ログイン後にコピー

説明:

  1. SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit 1), ',', -1 ): この式は、連結された文字列から個々の色を抽出するために使用されます。まず、SUBSTRING_INDEX を使用して、n.digit 番目のカンマの後の最初のカンマから次のカンマで終わる部分文字列を抽出します。次に、2 番目のコンマから始まり文字列の末尾までの部分文字列が抽出されます。これにより、効果的に単一の色が選択されます。
  2. (SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3): このサブクエリは、それぞれの位置を表す 0 から 3 までの一連の数値を生成します。連結された文字列内の色。
  3. ON LENGTH(REPLACE(colors, ',', '')) <= LENGTH(colors)-n.digit: この結合条件により、クエリは色数 (カンマで区切られた) が 4 以下の行のみを返すようになります。
  4. ORDER BY id, n.digit: これにより、結果が ID と色内の色の位置の両方によって並べ替えられます。

注: このクエリは、各行に最大 4 色が含まれていることを前提としています。行に 4 色を超える色を含めることができる場合は、サブクエリを変更して、より大きな一連の数値を生成する必要があります。

このクエリを実装すると、テーブル内の連結された文字列を個々の行に効果的に分割できます。処理と分析が容易になります。

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

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