我正在尝试写一个CSV格式的查询,如下所示:
SELECT SUBSTRING
(
(
SELECT ',' + [symbol], + ',' + [date] + ',' + [price]
FROM csvFormatTable
FOR XML PATH('')
)
,2,200000
)
AS CSV除了行尾的','之外,它给出的大多数结果都是正确的,但我确实想用换行符来代替它。我见过CHAR(10)和类似的东西,但它没有换行符,而是一个'#x0D'。以上查询的结果如下所示(不含char(10)内容):
symbol,date,price,mikeCode,2019-04-10,50,mikeCode,2019-04-11,200,mikeCode,2019-04-12,10,它应该在哪里:
symbol,date,price
mikeCode,2019-04-10,50
mikeCode,2019-04-11,200
mikeCode,2019-04-12,10它需要换行符,这样才能作为CSV可读。
发布于 2019-05-10 19:51:19
假设您使用的是SQL Server2016,那么请使用(N)CHAR(13)和(N)CHAR(10)。然后,您需要使用TYPE来避免字符的转义,然后使用value来获取值。
SELECT STUFF((SELECT ',' + CHAR(13) + CHAR(10) + [symbol] +
',' + [date] + ',' + [price]
FROM csvFormatTable
FOR XML PATH(''),TYPE).value('.','varchar(MAX)'),1,3,'') AS CSV;如果使用的是SQL Server 2017+,则可以使用STRING_AGG
SELECT STRING_AGG(CHAR(13) + CHAR(10) + ',' + [symbol] + ',' + [date] + ',' + [price],CHAR(13) + CHAR(10))
FROM csvFormatTable --Untested发布于 2019-05-10 22:39:17
多亏了@Larnu,我改变了我的SMSS中的设置(如何做的链接在这里):How to correctly insert newline in nvarchar
我只是稍微修改了一下我的查询,以获得想要的结果
DECLARE @SQL NVARCHAR(MAX)
SET @SQL =
'
DECLARE @test NVARCHAR(MAX)
SET @test = (SELECT STRING_AGG(CHAR(10) + [symbol] + '','' + [date] + '','' + [price], CHAR(13) ) FROM csvFormatTable)
SELECT @test
'
EXEC(@SQL)https://stackoverflow.com/questions/56077115
复制相似问题