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

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

DDD
DDDオリジナル
2024-12-17 01:47:24150ブラウズ

How can I split a single column of multiple subscription numbers into individual columns in SQL?

サブスクリプション番号を複数の列に分割する

サブスクリプション番号など、1 つの列に複数の値が含まれる状況では、これらの値を分割します個々の列に分割することは、有用なデータ操作テクニックになる可能性があります。ステップバイステップのガイドは次のとおりです:

1. XML フラグメンテーションのクロス適用:

このアプローチでは、XML フラグメンテーションを利用してサブスクリプション番号を XML ドキュメントに変換し、個々の値を個別のノードとして抽出できるようにします。

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.SomeCol,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
) B

ここでは、 xDim は、サブスクリプション番号文字列を XML に変換する断片化要素です。結果として得られるノードは、x[1]、x[2] などの番号が付けられ、ターゲット列に抽出されます。

2。オンザフライでのテーブルの作成:

または、クエリの実行中にターゲット テーブルを動的に作成することもできます。これにより、事前に明示的にテーブルを作成するステートメントが不要になります。

Select A.PUB_FORM_NUM
      ,B.*
 Into  MyNewPubTable
 From  @YourTable 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.PUB_FORM_NUM,' ','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
             ) B

このアプローチでは、MyNewPubTable を作成し、分割されたサブスクリプション番号の値を対象の列に直接挿入します。

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

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