ホームページ >データベース >mysql チュートリアル >SQL で複数のサブスクリプション番号の 1 つの列を個々の列に分割するにはどうすればよいですか?
サブスクリプション番号を複数の列に分割する
サブスクリプション番号など、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 サイトの他の関連記事を参照してください。