FOR XML PATH始终为值添加尾随空格

时间:2016-10-14 09:59:41

标签: sql-server

使用FOR XML PATH结构创建值列表, 我发现(令人讨厌的是)它总是为选定的值添加一个尾随空格。

这破坏了我提供自己的分隔符的尝试 - 在列之后添加了尾随空格并且分隔符已连接到分隔符。

例如:

SELECT country + '-' FROM countryTable...

产生以下字符串:

china- france- england-

有没有其他人看过这个,有没有办法阻止它?

我不认为TRIM()会起作用,因为在插入额外空格之前会应用它...

我正在使用SQL Server 2016。

由于

4 个答案:

答案 0 :(得分:2)

我怀疑country列中的数据,如果Country列中的每个值都有前导空格怎么办?对于XML PATH,不会为数据添加任何空间

试试这个

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

答案 1 :(得分:2)

好的,感谢John C和他的样本查询,我找到了罪魁祸首。

我在列名/分隔符后面有一个AS [data()]子句。

删除删除了尾随空格。 我不知道怎么/为什么但它确实......

答案 2 :(得分:0)

您可能有前导/尾随空格和/或CRLF。也许这会有所帮助

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

答案 3 :(得分:0)

out_dir = read_from_file(FILENAME) ... FOR XML PATH添加到此from MS Help

  

如果指定为列名的路径为AS [data()],则该值将被视为生成的XML中的原子值。如果序列化中的下一个项目也是原子值,则会向XML添加空格字符。这在创建列表类型元素和属性值时很有用。

当你在这里写字时...... AS 某事。然后某些用作每个选定值的打开/关闭标记标记。

添加2.可以在select clausule中连接每行的更多文件。对于字符串类型以外的其他类型,必须将值转换为字符串类型data()