比较短日期的正确方法(SQL Server 2005)

时间:2011-05-24 17:51:51

标签: sql sql-server-2005 datetime

目前我正在以这种方式比较短日期:

CONVERT(datetime,CONVERT(VARCHAR(10), return_date,101)) = '{0}'

我的主管说我应该这样做:

datepart(month,return_date)= 5   
and  datepart(day,return_date)=24   
and  datepart(year,return_date)=2011 

因为CONVERT函数识别的定义值101可能在将来发生变化。真的吗?这些参数值多久更改一次?过去有变化吗?是否有更好的方法来比较日期的简短形式?

3 个答案:

答案 0 :(得分:3)

如果“短日期”是指“只是没有时间的日期”

Select ...
From MyTable
Where return_date >= '20110524'
    And return_date < DateAdd(d, 1, '20110524')

首先,请注意Where子句第二部分中的<。其次,如果return_date上有索引,则此方法将使用它。另一种不利用索引(从而导致表扫描)的解决方案是:

Select ...
From MyTable
Where DateAdd(d, DateDiff(d, 0, return_date), 0) = '20110524'

如果return_date总是在没有时间组件的情况下存储(即时间组件总是午夜),那么您可以进行简单的比较:

Select ...
From MyTable
Where return_date = '20110524'

答案 1 :(得分:1)

除了添加转换样式之外,convert()及其转换样式自SQL Server 4.2以来未发生变化,c。 1992年,它与OS / 2捆绑在一起。

答案 2 :(得分:0)

这是我的偏好:

SELECT foo
FROM bar
WHERE return_date = CONVERT(datetime, FLOOR(CONVERT(float, Getdate())))

或者,如果return_date有时间戳

SELECT foo
FROM bar
WHERE CONVERT(datetime, FLOOR(CONVERT(float, return_date))) = CONVERT(datetime, FLOOR(CONVERT(float, Getdate())))