我正在尝试以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读取。
答案 0 :(得分:2)
假设您使用的是SQL Server 2016,请使用(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
答案 1 :(得分:0)
由于@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)