ホームページ >データベース >mysql チュートリアル >SQL でサブスクリプション番号の単一列を複数の列に分割するにはどうすればよいですか?

SQL でサブスクリプション番号の単一列を複数の列に分割するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 20:39:14642ブラウズ

How Can I Split a Single Column of Subscription Numbers into Multiple Columns in SQL?

単一の列を複数の列に分割する

この問題は、テーブル列内のデータを操作して追加の列を作成する方法を扱います。元の列には、サブスクリプション番号が 1 つの値で格納されます。私たちのタスクは、これらのサブスクリプション番号のさまざまな部分を抽出し、それらを複数の列に分散することです。

創造的なアプローチには、文字列操作と XML 処理を組み合わせて利用することが含まれます。その仕組みは次のとおりです:

ステップ 1: サブスクリプション番号を XML 構造に変換する

サブスクリプション番号内のすべてのスペースをダッシュ​​に置き換え、replace() 関数を使用してダッシュを変換します。特別な区切り文字にするには、「§§Split§§」と言います。これにより、変換された数値を XML 構造として表示できます。

replace(replace(subscription_number, ' ', '-'), '-', '§§Split§§')

変換された数値は次のようになります。

<x>SC-5-1395-174-25P</x>

ステップ 2: XML 構造から値を抽出する

Cast() 関数を使用して、変換された数値を XML タグでラップし、xDim.value() 関数を使用して個々の部分を抽出します。たとえば、最初の部分 (SC) を取得するには、次を使用します。

ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))

ステップ 3: 抽出された値を新しい列に割り当てる

クロス適用を使用して、抽出された値を新しい列に割り当てます結果セット内の新しい列。以下に例を示します。

Select A.subscription_number,
       B.Pos1 as Col1,
       B.Pos2 as Col2,
       B.Pos3 as Col3,
       B.Pos4 as Col4,
       B.Pos5 as Col5,
       B.Pos6 as Col6,
       B.Pos7 as Col7
From table A
Cross Apply (
    Select Pos1 = ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
          , Pos2 = ltrim(rtrim(xDim.value('/x[2]', 'varchar(max)')))
          , Pos3 = ltrim(rtrim(xDim.value('/x[3]', 'varchar(max)')))
          , Pos4 = ltrim(rtrim(xDim.value('/x[4]', 'varchar(max)')))
          , Pos5 = ltrim(rtrim(xDim.value('/x[5]', 'varchar(max)')))
          , Pos6 = ltrim(rtrim(xDim.value('/x[6]', 'varchar(max)')))
          , Pos7 = ltrim(rtrim(xDim.value('/x[7]', 'varchar(max)')))
    From (
        Select Cast('<x>' + replace((Select replace(replace(A.subscription_number, ' ', '-'), '-', '§§Split§§') as [*] For XML Path('')), '§§Split§§', '</x><x>') + '</x>' as xml) as xDim
    ) as A
) B

このアプローチにより、単一の列の値を複数の新しい列にエレガントに分割でき、データを保存およびアクセスするためのクリーンで構造化された方法が提供されます。

以上がSQL でサブスクリプション番号の単一列を複数の列に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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