传递空字符串时,SQL Server OPENJSON 为日期类型返回 1900-01-01
Posted
技术标签:
【中文标题】传递空字符串时,SQL Server OPENJSON 为日期类型返回 1900-01-01【英文标题】:SQL Server OPENJSON returns 1900-01-01 for date type when empty string is passed 【发布时间】:2019-02-07 18:44:13 【问题描述】:在 SQL Server 中使用 OPENJSON 解析 JSON 字符串时,如果日期字段为空,则 SQL 返回 1900-01-01。
DECLARE @dt [date]
SELECT @dt=dt
FROM OPENJSON('"dt":""')
WITH (dt [date] '$.dt')
PRINT @dt
输出:
1900-01-01
如何防止这种情况发生?我能想到的一种方法是检查结果值,如果它是“1900-01-01”,则重置为 NULL。虽然我不希望实际日期是 1900-01-01 但这对我来说看起来不正确。我是否遗漏了 SQL 语法中的某些内容?
【问题讨论】:
这与 JSON 无关。它already happens 和declare @dt date = ''; select @d;
。如果您的 json 可能包含空字符串代替日期而不是空值,请将它们提取为 varchar
,将空字符串转换为空值,然后再转换为日期。
SQL Server 将空字符串转换为“1900-01-01”。您需要在 json 字符串中传递 null 以避免验证。例如:"dt":null
【参考方案1】:
看起来dt
的返回值不是NULL
,而是''
,它作为日期是1900-01-01
。试试:
SELECT CONVERT(date,'');
您可以在dt
的值周围使用NULLIF
:
SELECT @dt = NULLIF(dt,'')...
【讨论】:
以上是关于传递空字符串时,SQL Server OPENJSON 为日期类型返回 1900-01-01的主要内容,如果未能解决你的问题,请参考以下文章
从 sql server 读取数据并在 PySpark 中使用特殊字符传递我的密码
SQL Server (2008) 将 ArrayList 或字符串传递给 SP 用于 IN()
ASP.Net 模拟将连接字符串传递给 SQL Server 数据库
SQL Server 分析服务在维度字符串属性中传递空值和空白值