我有点惊讶的是,我找不到快速解决我反对的问题,似乎这是一个常见的事情。我无法摆脱我的选择查询中的尾随空格。我想将数据放入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
等等。任何接受者?一如既往地感谢...
答案 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
列是某种varchar
,RTRIM
就没有理由不起作用。
您能否澄清表格中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