如何搜索包含默认值的日期(日期时间),即''。我猜它不是:
select * from table where dateofbirth=''
所有日期似乎都有默认值'1900-01-01'。但是,我的数据库中有人在此日期或之前有出生日期(主要是histroic人)。所以我做不到:
select * from table where dateofbirth='1900-01-01'
我知道某些版本的SQL Server的默认日期为:1899-12-31。
我想最好在未知日期使用空值。在这种情况下,我无法做到这一点。
我在这里已经阅读了很多关于使用SQL查找日期的问题,但我没有找到我的具体问题的答案。
答案 0 :(得分:0)
你要获得的最好的就是你所列出的:
select * from table where dateofbirth='1900-01-01'
如你所知,问题是,如果有人真的出生在1900年1月1日,你也会包括它们。但是你的查询真的无法知道差异。
要解决此问题,您需要更改系统使用的默认值(例如,NULL或更改为datetime2或date数据类型并使用1/1/0001)。然后将所有1/1/1900值更新为新的默认值。是的,这将错误地更新任何现有的1/1/1900生日的人,但至少它将防止将来发生。
答案 1 :(得分:0)
在SQL Server术语中,列X的默认值仅在首次创建新记录且未为该列提供值时使用。在初始创建记录之后,值只是一个值,与任何其他值相同。在单个表中,无法区分在列X中保留默认值的记录,因为它是提供的,或者是因为它是默认值。
这对你现在没有帮助,但有时使用的空值替代方法是使用“魔术值”。在出生日期的情况下,9999年12月31日的最大日期时间值可用于表示未知值(假设您的系统预计在8,000年内不会被使用:)有些人(包括我)不在我真的赞同使用魔法值,因为在数据库中没有办法表明他们的魔法状态。
里斯
答案 2 :(得分:0)
您可以将默认的DateTime值设为;
SELECT CONVERT(DATETIME, 0)
并根据需要将其应用于过滤器;
SELECT * FROM [Table] WHERE DateOfBirth = CONVERT(DATETIME, 0)
或者如果您需要选择更早的日期;
SELECT * FROM [Table] WHERE DateOfBirth <= CONVERT(DATETIME, 0)
<强> Fiddle example 强>