首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于CSV的SQL Server换行符

问用于CSV的SQL Server换行符
EN

Stack Overflow用户
提问于 2019-05-10 19:48:55
回答 2查看 187关注 0票数 0

我正在尝试写一个CSV格式的查询,如下所示:

代码语言:javascript
复制
SELECT SUBSTRING
(
    (
        SELECT ',' + [symbol], + ',' + [date] + ',' + [price]
        FROM csvFormatTable
        FOR XML PATH('')
    )
    ,2,200000
) 
AS CSV

除了行尾的','之外,它给出的大多数结果都是正确的,但我确实想用换行符来代替它。我见过CHAR(10)和类似的东西,但它没有换行符,而是一个'#x0D'。以上查询的结果如下所示(不含char(10)内容):

代码语言:javascript
复制
symbol,date,price,mikeCode,2019-04-10,50,mikeCode,2019-04-11,200,mikeCode,2019-04-12,10,

它应该在哪里:

代码语言:javascript
复制
symbol,date,price
mikeCode,2019-04-10,50
mikeCode,2019-04-11,200
mikeCode,2019-04-12,10

它需要换行符,这样才能作为CSV可读。

EN

回答 2

Stack Overflow用户

发布于 2019-05-10 19:51:19

假设您使用的是SQL Server2016,那么请使用(N)CHAR(13)和(N)CHAR(10)。然后,您需要使用TYPE来避免字符的转义,然后使用value来获取值。

代码语言:javascript
复制
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

代码语言:javascript
复制
SELECT STRING_AGG(CHAR(13) + CHAR(10) + ',' + [symbol] + ',' + [date] + ',' + [price],CHAR(13) + CHAR(10))
FROM csvFormatTable --Untested

db<>fiddle

票数 2
EN

Stack Overflow用户

发布于 2019-05-10 22:39:17

多亏了@Larnu,我改变了我的SMSS中的设置(如何做的链接在这里):How to correctly insert newline in nvarchar

我只是稍微修改了一下我的查询,以获得想要的结果

代码语言:javascript
复制
    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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56077115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档