Sql server日期时间比较需要时间来执行

时间:2012-03-14 10:29:26

标签: performance sql-server-2005 datetime comparison

我在SQL Server2005中有一个查询,其中比较了2个日期字段。如果我不包括时间并仅使用日期部分进行比较,则查询运行得很快(以毫秒为单位)。但是,我需要比较时间以及日期部分。如果我包含时间部分,则查询运行速度非常慢,最后返回连接超时错误。

 `((startdate1 >= @startdate2 and enddate1 <= @enddate2) or
(startdate1 <= @startdate2 and enddate1 >= @startdate2 and enddate1 <= @enddate2 ) or
(startdate1 >= @startdate2 and startdate1 < @enddate2 and enddate1 > @enddate2) or
(startdate1 < @startdate2 and enddate1 > @enddate2))`

这部分查询需要花费大量时间来执行。但是,如果我将查询更改为以下格式,查询运行速度非常快。

    ((cast(CONVERT(VARCHAR(10),startdate1,101) as datetime) >= cast(CONVERT(VARCHAR(10),@startdate2,101) as datetime)      
AND cast(CONVERT(VARCHAR(10),enddate1,101) as datetime)<=  cast(CONVERT(VARCHAR(10),@enddate2,101) as datetime) ) OR     

(cast(CONVERT(VARCHAR(10),startdate1,101) as datetime) <=  cast(CONVERT(VARCHAR(10),@startdate2,101) as datetime)      
AND ((cast(CONVERT(VARCHAR(10),enddate1,101) as datetime) >= cast(CONVERT(VARCHAR(10),@startdate2,101) as datetime) )     
AND (cast(CONVERT(VARCHAR(10),enddate1,101) as datetime) <=  cast(CONVERT(VARCHAR(10),@enddate2,101) as datetime)  ))) OR 

(cast(CONVERT(VARCHAR(10),startdate1,101) as datetime) >=  cast(CONVERT(VARCHAR(10),@startdate2,101) as datetime)  and     
((cast(CONVERT(VARCHAR(10),startdate1,101) as datetime) < cast(CONVERT(VARCHAR(10),@enddate2,101) as datetime) ) AND     
(cast(CONVERT(VARCHAR(10),enddate1,101) as datetime) >  cast(CONVERT(VARCHAR(10),@enddate2,101) as datetime)  ))) OR     

(cast(CONVERT(VARCHAR(10),startdate1,101) as datetime) <  cast(CONVERT(VARCHAR(10),@startdate2,101) as datetime)  and     
cast(CONVERT(VARCHAR(10),enddate1,101) as datetime) >  cast(CONVERT(VARCHAR(10),@enddate2,101) as datetime) ))

请建议我对此有所了解。在此先感谢...

1 个答案:

答案 0 :(得分:0)

您是否尝试过DateDiff功能?