目前我用这种方式比较短日期:
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())))