如何在SQL中将NULL连接为字符串的一部分

时间:2019-04-24 03:21:28

标签: sql json sql-server

我正在使用SQL Server2008。我必须从其中获取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的较大JSON SQL代码的一部分。

2 个答案:

答案 0 :(得分:0)

您应该可以使用接近第二个版本的东西,但需要进行如下调整:

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

这将使您的JSON格式正确(如下所示)(或JSON的代码段):

{"OrderDate":null}

每当您在JavaScript中使用JSON对象时,如果遇到问题,都可以始终将JSON字符串传递到JSON.parse()方法中,该方法将构造由您的JSON字符串描述的JavaScript对象。

答案 1 :(得分:0)

您可以使用ISNULL内置函数

实现此目的
SELECT '"OrderDate": '+ ISNULL(CONVERT(varchar(23), OrderDate, 20), 'NULL') FROM DateTable

此外,SQL Server提供了生成JSON格式结果的方法。 请检查此链接Format Query Results as JSON with 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