在SQL Sever中转换为谓词的最佳短日期是什么。
我有一个日期2013-06-11 15:06:27.000
,想2013-06-11
在谓词中使用短日期部分。
为此目的,在SQL Server中最短的转换日期是什么?
对于SQL2005 +:
注意: Select Convert(DateTime, Convert(VarChar, DateTimeColumn, 12)) <operator> <const>
不SARG
能够!因此,如果您有索引,DateTimeColumn
则SQL Server将无法Index Seek
在此列上查找()。相反,SQL Server将使用的Index Scan
,Clustered Index Scan
或Table Scan
。
如果要过滤列上的行,DATETIME
可以使用DateTimeColumn >= RangeStart AND DateTimeColumn < RangeEnd
或DateTimeColumn BETWEEN RangeStart AND RangeEnd
谓词。
如何生成RangeStart
和RangeEnd
?
DECLARE @SelectedDate DATETIME;
SET @SelectedDate='2013-06-11 15:06:27.000';
SELECT DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0) AS Start,
DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0) AS [End 1],
DATEADD(MILLISECOND,-3,DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0)) AS [End 2]
注2:对于DATETIME
列,最后一个毫秒可以是其中之一{0,3,7}
(请参阅BOL)。
结果:
Start End 1 End 2
----------------------- ----------------------- -----------------------
2013-06-11 00:00:00.000 2013-06-12 00:00:00.000 2013-06-11 23:59:59.997
范例1:
...
WHERE h.OrderDate>=DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0)
AND h.OrderDate<DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0)
范例2:
...
WHERE h.OrderDate>=DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0)
AND h.OrderDate<=DATEADD(MILLISECOND,-3,DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0))
范例3:
...
WHERE h.OrderDate BETWEEN DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate),0) AND DATEADD(MILLISECOND,-3,DATEADD(DAY,DATEDIFF(DAY,0,@SelectedDate)+1,0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句