SQL Server:将日期时间与GETDATE()进行比较

时间:2014-02-22 18:49:57

标签: sql sql-server date datetime

我有一个存储过程,应该获取日期等于当前日期或将来的所有记录。 日期保存在列targetDate中,并格式化为datetime。 我对应的WHERE子句如下:

WHERE A.targetDate >= GETDATE()

通常我的存储过程工作正常,我唯一的问题是如果targetDate等于当前日期,因为所有日期都保存如下,即时间设置为零:

2014-02-22 00:00:00.000

我如何更改我的WHERE子句以便它只考虑日期但忽略与它一起保存的时间,这样即使时间已经过去,我也会获得当前日期的任何记录?

非常感谢你提供任何帮助,蒂姆。

2 个答案:

答案 0 :(得分:21)

更改为:

WHERE A.targetDate >= cast(GETDATE() as date)

编辑 - 因为targetdate还包含时间,是的,格式如下:

WHERE cast(A.targetDate as date) >= cast(GETDATE() as date)

编辑 - 给出评论re:表现,可能想尝试:

WHERE a.targetdate >= cast(cast(getdate() as date) as datetime)

上次编辑应该会给你相同的结果,并利用targetdate上的任何索引

答案 1 :(得分:2)

以下内容应该为您提供没有时间的当前日期:

SELECT DATEADD(dd,0,DATEDIFF(dd,0,GETDATE()))

这应该是你的最后一行:

WHERE A.targetDate >= DATEADD(dd,0, ATEDIFF(dd,0,GETDATE()))