2016-10-14 65 views
1

FOR XML PATH構造体を使用して値のリストを作成すると、 私はそれが常に選択された値に後続のスペースを追加することがわかります。FOR XML PATHは常に値に末尾のスペースを追加します

これは私自身のデリミタを提供しようとした私の試みです。末尾のスペースはの後に追加され、の列とデリミタが連結されています。例えば

:次の文字列で

SELECT country + '-' FROM countryTable... 

結果:

china- france- england- 

はこれを見た他の誰を持っており、それを停止する方法はありますか?

私は、SQL Serverのに2016

おかげ

+0

'SELECT LEFT(columnName、LEN(ColumnName)-1) 'を使用してください –

+0

検証可能な例を表示できますか? 'select for xml'はそれ自身でスペースを追加しません。多分、問題はおそらくどこか他の場所にあります。 –

+0

'Country'カラムの各値に先頭のスペースが –

答えて

2

を使用しています...余分なスペースが挿入される前に、それが適用されるようにTRIM()は、動作します

を考えていませんデータcountry列内にあると思われます。[国]列の各値に先行スペースがある場合はどうなりますか? XML PATHがデータに任意のスペースを追加しないために

あなたは、スペースおよび/またはのCRLFを末尾に/リードしている可能性があり、この

SELECT RTRIM(LTRIM(country)) + '-' FROM countryTable... 
0

を試してみてください。おそらくこれは、[OK]を

Declare @countryTable table (country varchar(100)) 
Insert Into @countryTable values 
(' china'),    -- leading space 
(char(13)+'france'), -- leading char(13) 
(char(10)+'england') -- leading char(10) 


Select Value=Stuff((Select Distinct '-' + ltrim(rtrim(replace(replace(country,char(13),''),char(10),''))) 
         From @countryTable 
         Where 1=1 
         For XML Path ('')),1,1,'') 

戻り

Value 
china-england-france 
+0

私のCountryName列には先頭にも末尾にもスペース(または他の空白文字)がないことを皆に保証することができます。 – radders

+0

@raddersお役立ち情報あなたの問題を解決しましたか? –

+0

いいえ、問題は残ります。私はそれらの間のスペースで生きなければなりません.... – radders

1

を助ける、ジョン・Cと彼のサンプルクエリのおかげで、私は犯人を見つけました。

カラム名/区切り文字の後にAS [data()]句がありました。

これを削除すると、末尾のスペースが削除されました。 私はどのように/なぜ知らないが、それがなかった...

0

FOR XML PATH ... AS [data()]は、列名として指定したパスがdata()ある場合、値は以下のように扱われ、このfrom MS Help

に追加します生成されたXMLの原子値。シリアライゼーションの次の項目がアトミック値でもある場合、スペース文字がXMLに追加されます。これは、リスト型の要素と属性値を作成する場合に便利です。

ここに書き込むと... AS 何か。次に何かは、選択された各値のオープン/クローズマークアップタグとして使用されます。

追加2.各行からselect clausule more filedsのconcateが可能です。文字列型以外の型の場合は、値を文字列型に変換する必要がありますCAST AS

関連する問題