2017-05-08 8 views
0

は私がADDRESSFORMATキャリッジretrun

1と呼ばれる私のデータベーステーブル内のフィールドを持っているフィールド、ロッジ

ストリート

タウン

郵便番号

分割する方法内容はCHAR(13)とCHAR(10)で区切られます。

最初の行、2行目などを取り戻すだけのクエリでフィールドを作成するにはどうすればよいですか?

ありがとうございました

+0

してください:(1)適切にあなたの質問をフォーマットすること、(ii)サンプルデータと結果の両方を提供し、(C)は、データベースソフトウェアを指定します、(4)あなたのコードと研究を示す。 – HABO

答えて

0

以下はインラインアプローチです。

クロス・アプライBは、「クリーン・ストリング」を生成します。これにより、反復するCRLFがいくつも削除され、Cross Appy Cによって処理されるパイプで区切られた文字列が作成されます。

繰り返し文字列を削除する方法は、Gordon Linoff数週間前に示されます。申し訳ありませんが、元の投稿を見つけることができません。

Declare @YourTable table (ID int,ADDRESSFORMAT varchar(max)) 
Insert Into @YourTable values 
(1,'The Lodge 

Street 

Town 

Postcode') 

Select A.ID 
     ,C.* 
From @YourTable A 
Cross Apply ( 
       Select CleanString = replace(replace(replace(replace(replace(ADDRESSFORMAT,char(13),'|'),char(10),'|'),'|','><'),'<>',''),'><','|') 
      ) B 
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)'))) 
         ,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)'))) 
         ,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)'))) 
       From (Select Cast('<x>' + replace((Select replace(B.CleanString,'|','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 

      ) C 

戻り

ID Pos1  Pos2 Pos3 Pos4  Pos5 Pos6 Pos7 Pos8 Pos9 
1 The Lodge Street Town Postcode NULL NULL NULL NULL NULL 
関連する問題