SQL Server Datetime сравнение занимает время, чтобы выполнить - PullRequest
0 голосов
/ 14 марта 2012

У меня есть запрос в 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 голосов
/ 14 марта 2012

Вы пробовали DateDiff функцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...