传递空字符串时,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 分析服务在维度字符串属性中传递空值和空白值

如何在 SQL Server 中使用 XML 节点传递 NULL 而不是字符串格式的“NULL”值

非空字符串时触发条件