我有一个存储过程,应该获取日期等于当前日期或将来的所有记录。 日期保存在列targetDate中,并格式化为datetime。 我对应的WHERE子句如下:
WHERE A.targetDate >= GETDATE()
通常我的存储过程工作正常,我唯一的问题是如果targetDate等于当前日期,因为所有日期都保存如下,即时间设置为零:
2014-02-22 00:00:00.000
我如何更改我的WHERE子句以便它只考虑日期但忽略与它一起保存的时间,这样即使时间已经过去,我也会获得当前日期的任何记录?
非常感谢你提供任何帮助,蒂姆。
答案 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()))