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

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

Barbara Streisand
リリース: 2024-12-25 20:39:14
オリジナル
655 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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