Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:将datetime day与GETDATE()进行比较_Sql_Sql Server_Date_Datetime - Fatal编程技术网

SQL Server:将datetime day与GETDATE()进行比较

SQL Server:将datetime day与GETDATE()进行比较,sql,sql-server,date,datetime,Sql,Sql Server,Date,Datetime,我有一个存储过程,它应该获取日期等于当前日期或将来日期的所有记录。 日期保存在targetDate列中,格式为datetime。 我对应的WHERE子句如下所示: WHERE A.targetDate >= GETDATE() 一般来说,我的存储过程工作正常,唯一的问题是如果targetDate等于当前日期,因为所有日期都按如下方式保存,即时间设置为零: 2014-02-22 00:00:00.000 如何更改WHERE子句,使其只考虑日期,而忽略随日期一起保存的时间,以便即使时间已过

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

WHERE A.targetDate >= GETDATE()
一般来说,我的存储过程工作正常,唯一的问题是如果targetDate等于当前日期,因为所有日期都按如下方式保存,即时间设置为零:

2014-02-22 00:00:00.000
如何更改WHERE子句,使其只考虑日期,而忽略随日期一起保存的时间,以便即使时间已过,也能获得具有当前日期的任何记录


非常感谢您在这方面的帮助,Tim。

以下内容将立即为您提供当前日期:

SELECT DATEADD(dd,0,DATEDIFF(dd,0,GETDATE()))
这应该是您的最后一行:

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

WHERE A.targetDate >= cast(GETDATE() as date)
编辑-因为targetdate也包含时间,所以是,格式如下:

WHERE cast(A.targetDate as date) >= cast(GETDATE() as date)
编辑-有关性能的给定注释,可能要尝试:

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

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

您有哪个版本的sql server?我有sql server 2008版谢谢-这对我不起作用。我是否也必须格式化targetDate?如果是日期字段,则不必格式化。它是一个时间戳还是一个日期字段?它是一个日期时间字段,但输入总是一个日期,这就是为什么它会像上面的例子那样为时间添加零。没有必要将
targetDate
强制转换为
date
。将字段包装在强制转换()中使其不可搜索。换句话说,它破坏了使用索引的能力,并导致全表扫描。在这种情况下,如果该字段已经是日期-时间数据类型,则不需要该字段(在比较
=a_date
时不需要删除时间组件)。使用第二个
SELECT
是语法错误。不需要子查询,因此只需删除
选择
。并更改
DATEDIFF
ATEDIFF
;)非常感谢。这是上面一行的复制/粘贴错误;我修好了。