SQL Server中如何让JSON_VALUE遇到空字符串时返回NULL而非空值
SQL Server中JSON_VALUE空字符串转NULL的替代方案
SQL Server原生JSON_VALUE函数本身会严格区分「键不存在/值为NULL」和「值为空字符串」,没有内置参数可以直接让空字符串返回NULL,以下是两种不需要手动写IF判断空字符串的替代方案:
方案1:使用NULLIF函数包裹(最常用、轻量化)
直接在JSON_VALUE外层套NULLIF函数,一行即可完成空字符串到NULL的转换,不需要单独写分支判断:
DECLARE @JsonText varchar(MAX) = '{ "Test": "" }' -- 直接在赋值时用NULLIF处理空串 DECLARE @Name varchar(MAX) = NULLIF(JSON_VALUE(@JsonText, '$.Test'), '') ; IF (@Name IS NULL) BEGIN SELECT 'Null' AS Result END ELSE BEGIN SELECT 'Empty' AS Result END
执行上述代码后输出结果为Null,完全符合预期。
方案2:封装自定义标量函数(适合高频使用场景)
如果你需要在多处用到空字符串转NULL的JSON取值逻辑,可以封装为自定义函数,后续调用更简洁:
-- 一次创建,后续可反复调用 CREATE FUNCTION dbo.JsonValueNullIfEmpty( @JsonText varchar(MAX), @JsonPath varchar(1000) ) RETURNS varchar(MAX) AS BEGIN RETURN NULLIF(JSON_VALUE(@JsonText, @JsonPath), '') END
调用示例:
DECLARE @Name varchar(MAX) = dbo.JsonValueNullIfEmpty(@JsonText, '$.Test')
内容的提问来源于stack exchange,提问作者Riddhish Bambhroliya
相关产品推荐
相关产品推荐

