我正在运行查询来检查是否有任何记录包含空白DateOfBirth
,但返回的数据不是我所期望的。
我运行了以下命令:
SELECT TOP 5 DateOfBirth, *
FROM [MyDataBase].[dbo].[CustomerRecord]
WHERE DateOfBirth = ''
当我运行这个程序时,我的结果显示如下行:
ID | 出生日期 | 姓 |
---|---|---|
1 | 1900-01-01 | 琼斯 |
2 | 1900-01-01 | 执事 |
6 | 1900-01-01 | 熏肉 |
10 | 1900-01-01 | 詹姆斯 |
12 | 1900-01-01 | 烧伤 |
显示Information_SCHEMA.Columns
列定义为 date
,COLUMN_DEFAULT
为,NULL
并IS_NULLABLE
设置为YES
。
那么为什么它不返回空白行呢?
您说 DateOfBirth 是
DATE
。那么,为什么要将它与字符串进行比较呢?您不应该这样做。请将日期与日期、字符串与字符串等进行比较。不要混淆这些类型。日期永远不会等于空字符串 (''
),因为它们是两个不同的东西。因此,您得到的结果有些随意。显然,SQL Server 擅自将空字符串解释为等于日期 1900-01-01,但在我看来,它不应该这样做。“空白” DateOfBirth 指的是 NULL 日期。因此:
查询返回的行与日期默认值 1900-01-01 匹配。当空字符串隐式转换为时间数据类型时,将使用 SQL Server 数据类型文档中指定的默认值进行比较,如下所示。