У меня есть запрос в 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) ))
Пожалуйста, предложите мне некоторую идею по этому поводу. Заранее спасибо ...