0
は私がADDRESSFORMATキャリッジretrun
1と呼ばれる私のデータベーステーブル内のフィールドを持っているフィールド、ロッジ
ストリート
タウン
郵便番号
分割する方法内容はCHAR(13)とCHAR(10)で区切られます。
最初の行、2行目などを取り戻すだけのクエリでフィールドを作成するにはどうすればよいですか?
ありがとうございました
は私がADDRESSFORMATキャリッジretrun
1と呼ばれる私のデータベーステーブル内のフィールドを持っているフィールド、ロッジ
ストリート
タウン
郵便番号
分割する方法内容はCHAR(13)とCHAR(10)で区切られます。
最初の行、2行目などを取り戻すだけのクエリでフィールドを作成するにはどうすればよいですか?
ありがとうございました
以下はインラインアプローチです。
クロス・アプライ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
してください:(1)適切にあなたの質問をフォーマットすること、(ii)サンプルデータと結果の両方を提供し、(C)は、データベースソフトウェアを指定します、(4)あなたのコードと研究を示す。 – HABO