3

我有点惊讶我找不到快速解决我所面临的问题的方法,这似乎是一件很常见的事情。我无法摆脱选择查询中的尾随空格。我想将数据放入 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

等等。有接盘侠吗?一如既往地提前感谢..

4

3 回答 3

2

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

于 2012-09-17T06:17:38.103 回答
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

其他替代方法也可以参考这里

关于RTRIM不工作的问题,这似乎很奇怪。为了安全起见,我已添加LTRIM + RTRIM到上述查询中。但是,只要您的symbol专栏是某种varchar,就真的没有理由RTRIM不工作。

你能澄清symbol一下表中列的数据类型吗?

于 2012-09-17T02:32:31.390 回答
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
于 2012-09-17T06:00:00.510 回答