根据smalldatetime比较过滤结果

时间:2015-06-07 21:53:27

标签: sql sql-server sql-server-2008

我的数据库日期存储在smalldatetime中。 现在,如果我需要根据(例如今天的日期等于数据库中的日期)过滤结果,那么最好的方法是什么?

select * from tbl Emp where Emp.date = cast(getdate() as smalldatetime) 

//这与日期不匹配

我发现的另一种方式,但不确定是否在表格中投射日期会影响性能,如:

select * from tbl Emp where cast(Emp.date as date) = cast(getdate() as date)

1 个答案:

答案 0 :(得分:2)

这种方法准确无误:

where cast(Emp.date as date) = cast(getdate() as date)

此方法准确,可以使用索引:

where (Emp.date >= cast(getdate() as date) and
       Emp.date < cast(getdate() + 1 as date))

+ 1是SQL Server的一种便利,它将一天的值增加到datetime。但是,你也可以使用

where (Emp.date >= cast(getdate() as date) and
       Emp.date < dateadd(day, 1, cast(getdate() as date))
      )