【问题标题】:Is there any way to return null in JSON_VALUE instead of empty in SQL Server有没有办法在 JSON_VALUE 中返回 null 而不是在 SQL Server 中返回空
【发布时间】:2022-01-04 01:57:35
【问题描述】:

我的示例代码是这样的:

DECLARE @JsonText varchar(MAX) = '{
    "Test": ""
}'

DECLARE @Name varchar(MAX) = JSON_VALUE(@JsonText, '$.Test') ;

IF (@Name IS NULL)
BEGIN
    SELECT 'Null' AS Result
END
ELSE
BEGIN 
    SELECT 'Empty' AS Result
END

我得到了一个输出:

Result
----------
Empty

我的预期输出是 Null,我尝试使用 trim,然后检查字符串是否为空,然后返回 null 工作正常。

IF (@Result = '') 
    SET @Result = NULL; 

但我正在寻找任何其他替代方案(如果可用)返回 null 而不是空。

【问题讨论】:

  • 如果您希望该值为NULL,则在您的JSON 中定义该值为NullNull""not 相同的值,就像 NULL'' 不是一样。
  • 你能解释一下为什么你想要NULL吗? NULL 表示 unknown 但它不是未知的 - 它是空字符串。

标签: sql-server stored-procedures sql-function


【解决方案1】:

零长度字符串(在 JSON 中 "" 和 T-SQL 中 '')和 NULL相同的值。在您的 JSON 中,您的字符串长度为零。如果您希望从 JSON 返回 NULL 值,请在 JSON 中将该值定义为 Null

DECLARE @JsonText nvarchar(MAX) = N'{
    "Test": null
}';

DECLARE @Name nvarchar(MAX) = JSON_VALUE(@JsonText, '$.Test');
IF (@Name IS NULL)
BEGIN
    SELECT 'Null' AS Result;
END
ELSE
BEGIN 
    SELECT 'Empty' AS Result;
END;

这将返回 varchar'Null'

或者,如果您的表达式返回长度为零的字符串,您可以使用 NULLIF 返回 NULL,但我建议实际上需要更正的是 JSON:

SET @Name = NULLIF(JSON_VALUE(@JsonText, '$.Test'),N'');

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多