【问题标题】:Why does inserting empty string into date column produce 1900-01-01为什么将空字符串插入日期列会产生 1900-01-01
【发布时间】:2021-01-08 08:09:37
【问题描述】:

为什么空字符串'' 会呈现为'1900-01-01',而NULL 的值却是NULL

create table "dbo"."day" (day date)
insert into "dbo"."day" (day) values (NULL), ('')
select day from "dbo"."day"
day
NULL
1900-01-01

这是一个更简化的示例,它还返回1900-01-01

SELECT CAST('' as date)

【问题讨论】:

  • 我猜因为''发生了隐式类型转换,所以''被默认日期替换,1900-01-01
  • 空白是从哪里来的?您是否尝试导入带有可选日期字段的 CSV 文件?在这种情况下,您应该配置导入代码以用空值替换空字段。 一些导入方法允许您对每个字段进行配置

标签: sql-server tsql azure-sql-database


【解决方案1】:

NULL 日期为 NULL(未知值)。另一方面,空字符串的计算结果为 0,在 SQL Server 中,它是一个隐含的整数,表示自 1900-01-01 以来的天数。你可以参考这个post
所以当我们尝试在日期类型列中插入''时,就等于插入1900-01-01

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多