Разрыв строки SQL Server для CSV - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь написать запрос в формате 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.

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Если вы работаете на 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

дб <> скрипка

0 голосов
/ 10 мая 2019

Благодаря @Larnu я изменил настройки в своем SMSS (ссылка на то, как это сделать, здесь): Как правильно вставить новую строку в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...