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



目前我用这种方式比较短日期:

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可能在将来改变。这是真的吗?这些参数值多久更改一次?过去的情况变了吗?有没有更好的方法来比较简短的日期形式?

如果您所说的"短日期"是指"没有时间的日期"

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'

除了添加转换样式外,convert()及其转换样式自1992年与OS/2捆绑在一起的SQL Server 4.2以来一直没有改变。

这是我的偏好:

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())))

相关内容

  • 没有找到相关文章