sql server rtrim不适合我,建议?

时间:2012-09-17 02:12:05

标签: sql sql-server sql-server-2008 sql-server-2008-r2

我有点惊讶的是,我找不到快速解决我反对的问题,似乎这是一个常见的事情。我无法摆脱我的选择查询中的尾随空格。我想将数据放入csv文件中。我很乐意将结果从SSMS“结果复制/粘贴到文本”中复制/粘贴,如果这更容易的话。无论哪种方式,我的查询是:

declare @maxDate date = (select MAX(TradeDate) from tblDailyPricingAndVol)

select p.Symbol, ','
from tblDailyPricingAndVol p
where p.Volume > 1000000 and p.Clse <= 40 and p.TradeDate = @maxDate
order by p.Symbol

然后它返回:

A       ,
AA      ,
ABB     ,

等。围绕p.Symbol场的Rtrim没有帮助。如果我能找到最佳解决方案,我会得到以下结果:

A,AA,ABB

等等。任何接受者?一如既往地感谢...

3 个答案:

答案 0 :(得分:2)

p.Symbol定义为CHAR(8),并且无法修剪CHAR值。在修剪之前转换为N / VARCHAR(8)。

答案 1 :(得分:0)

根据您的预期结果,您似乎希望将所有行的symbol值连接成一个逗号分隔的字符串。

为此,您可以这样做: -

DECLARE @str VARCHAR(MAX)
SELECT @str = COALESCE(@str+',' ,'') + LTRIM(RTRIM((p.Symbol)))
FROM tblDailyPricingAndVol p
WHERE p.Volume > 1000000 and p.Clse <= 40 and p.TradeDate = @maxDate
ORDER by p.Symbol
SELECT @str
GO

其他替代方法也可以引用here

关于RTRIM无效的问题,这看起来很奇怪。为了安全起见,我已将LTRIM + RTRIM添加到上述查询中。但是,只要您的symbol列是某种varcharRTRIM就没有理由不起作用。

您能否澄清表格中symbol列的数据类型?

答案 2 :(得分:0)

由于您使用的是SQL Server 2008,因此可以执行此操作:

SELECT  STUFF((SELECT ', ' + rtrim(p.Symbol)
          from tblDailyPricingAndVol p FOR XML PATH('')),1,2,'') as Symbol
WHERE    p.Volume > 1000000 
AND      p.Clse <= 40 
AND      p.TradeDate = @maxDate
ORDER BY p.Symbol