You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询WHERE子句匹配空日期异常:返回1900-01-01而非空值

为什么查询DateOfBirth = ''返回1900-01-01而非NULL记录?

我执行以下查询试图找出DateOfBirth为空的记录,但返回结果不符合预期:

SELECT TOP 5 DateOfBirth, *
FROM [MyDataBase].[dbo].[CustomerRecord] 
WHERE DateOfBirth = ''

返回的是DateOfBirth为1900-01-01的行:

IDDateOfBirthSurname
11900-01-01Jones
21900-01-01Deacon
61900-01-01Bacon
101900-01-01James
121900-01-01Burns

通过INFORMATION_SCHEMA.COLUMNS查看列定义:DateOfBirth是date类型,COLUMN_DEFAULT为NULL,IS_NULLABLE设置为YES。为什么查询没有返回DateOfBirth为NULL的行?


问题根源

在SQL Server中,当你将空字符串''与date类型的列进行比较时,会触发隐式类型转换:空字符串会被自动转换为date类型的默认起始值1900-01-01。这意味着你的查询WHERE DateOfBirth = ''实际上等价于WHERE DateOfBirth = '1900-01-01',自然只会返回该日期的行,而非NULL值。

另外,NULL值的判断逻辑特殊:NULL不等于任何值(包括它自己),所以用= NULL或者= ''都无法匹配到NULL的行。

正确的查询语句

要筛选出DateOfBirth为NULL的记录,必须使用IS NULL关键字:

SELECT TOP 5 DateOfBirth, *
FROM [MyDataBase].[dbo].[CustomerRecord] 
WHERE DateOfBirth IS NULL

内容的提问来源于stack exchange,提问作者Northernlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:27:44