2009-06-10 57 views
1

我每天都有计划任务查询包含名为AttemptDate的列的日期时间为数据类型的表。但是,无论日期如何,任务都会查询所有条目。因此,任务执行时,它输出的所有日期的项目如下图所示:如何使用datetime作为数据类型(TSQL)获取列中当前日期部分的条目

2009-06-06 06:01:30.852 
2009-06-07 01:41:46.719 
2009-06-08 03:58:23.945 

的SQL查询如下所示:

SELECT AttemptDate from dbo.ChangeAttempt 

表dbo.ChangeAttempt具有以下结构:

Column   Data Type  Constraints   
------   ---------  ----------- 

EventData  xml    NOT NULL 
AttemptDate  datetime  NOT NULL DEFAULT GETDATE() 
DBUser   char(50)  NOT NULL 

我的问题是:从我现有的TSQL查询中,如果我添加where子句,如何获取当前日期部分的条目?

我在这里指的是当前日期是计划运行TSQL查询的日期。

此外:

我运行的是TSQL查询对SQL Server版本是2005

回答

3
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE AttemptDate >= cast(floor(cast(getdate() as float)) as datetime) 
+0

非常感谢。有用。 – titanium 2009-06-10 21:17:33

+2

最快的方法是datediff/dateadd方法http://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get-date-from-datetime/150722#150722我已经Itzhak在SQL Server mag中看到过类似的测试 – gbn 2009-06-11 05:11:14

1
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE DATEDIFF(d, AttemptDate, GetDate()) = 0 
0

如果你是问你怎么说是由约束违约中的条目,那么表格的设置就没有办法了。如果您省略了attemptdate,则服务器将使用当前日期默认为您,然后不可能告诉您。如果您可以更改表结构,则可以通过使用某种类型的标志和触发器来实现此目的

0

我觉得你的查询将有更好的表现,如果你先保存当前数据库中的日期时间变量:

DECLARE @curr_date datetime; 
SET @curr_date = cast(floor(cast(getdate() as float)) as datetime) 
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE AttemptDate >= @curr_date 
相关问题