Как объединить NULL как часть строки в SQL - PullRequest
1 голос
/ 24 апреля 2019

Я использую SQL Server 2008. Мне нужно получить данные из него в формате JSON. Я использую метод конкатенации, как показано ниже. Следующий код заменяет значение NULL пустой строкой. Вместо этого я хотел бы, чтобы оно было равно NULL.

+ ',"OrderDate":"' + CASE WHEN orderDate IS NULL THEN 
 '' ELSE CONVERT(varchar(23), orderDate, 20) END + '"}'

Выходные данные, когда orderDate имеет значение null: "OrderDate": "" Вместо этого я хотел бы иметь его как «OrderDate»: NULL. Я пытался,

+ ',"OrderDate":' + CASE WHEN orderDate IS NULL THEN 
 NULL ELSE CONVERT(varchar(23), orderDate, 20) END + '}'

Я тоже пробовал,

+ ',"OrderDate":' + CAST(CASE WHEN orderDate IS NULL 
THEN NULL ELSE CONVERT(varchar(23), orderDate, 20) END AS 
VARCHAR) + '}'

Но сам JSON вышел как NULL. Упомянутый выше фрагмент кода является частью более крупного JSON-кода, создающего код SQL.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Этого можно добиться с помощью встроенной функции ISNULL

SELECT '"OrderDate": '+ ISNULL(CONVERT(varchar(23), OrderDate, 20), 'NULL') FROM DateTable

Кроме того, SQL Server предоставляет способ генерации результата в формате JSON. Проверьте эту ссылку Форматирование результатов запроса в формате JSON с FOR JSON (SQL Server)

Скопируйте и вставьте следующий запрос и выполните его

-- Create Temp table
CREATE TABLE #TempDateTable (ID INT IDENTITY(1,1), OrderDate DATETIME)

--Insert some value to test
INSERT INTO #TempDateTable VALUES('04/24/2019'), (NULL), ('03/24/2019')

-- Generate JSON format result
SELECT ID, ISNULL(CONVERT(varchar(23), OrderDate, 20), 'NULL') OrderDate
FROM #TempDateTable  
FOR JSON AUTO  

-- Drop the table
DROP TABLE #TempDateTable
0 голосов
/ 24 апреля 2019

Вы должны быть в состоянии использовать что-то похожее на вашу вторую версию, но слегка подправлено так:

+ ',"OrderDate":' + CASE WHEN orderDate IS NULL THEN 
'null' ELSE CONVERT(varchar(23), orderDate, 20) END + '}'

это сделает ваш JSON отформатированный правильно, как это (или фрагмент JSON):

{"OrderDate":null}

Всякий раз, когда вы используете объект JSON в javascript, если у вас есть проблемы, вы всегда можете передать строку JSON в метод JSON.parse(), который создаст объект JavaScript, описанный вашей строкой JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...