目前我正在以这种方式比较短日期:
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可能在将来发生变化。真的吗?这些参数值多久更改一次?过去有变化吗?是否有更好的方法来比较日期的简短形式?
答案 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())))