Сравнение действующих дат в SQL

Хотите знать, есть ли лучшее, почему в предложении WHERE выбор записей, когда вам нужно посмотреть на эффективные даты начала и окончания?

В настоящее время, как я делал это в прошлом на MS SQL Server. Просто беспокоюсь о дате, а не о времени. Я использую SQL Server 2005.

AND Convert(datetime, Convert(char(10), ep.EffectiveStartDate, 101))
   <= Convert(datetime, Convert(char(10), GetDate(), 101))
AND Convert(datetime, Convert(char(10), ep.EffectiveEndDate, 101))
   >= Convert(datetime, Convert(char(10), GetDate(), 101))
22.08.2008 16:35:19
5 ОТВЕТОВ

пытаться

ep.EffectiveStartDate BETWEEN @date1 AND @date2

где бы вы сделали что-то вроде

declare @date1 datetime, @date2 datetime;  
set @date1 = cast('10/1/2000' as datetime)  
set @date2 = cast('10/1/2020' as datetime)
-1
22.08.2008 16:36:33
Это даже близко не к тому, что он просит. Где EffectiveEndDate?
ErikE 25.01.2011 22:16:22

Это ужасно, взгляните на « Только в базе данных». Можете ли вы получить улучшение на 1000% и более, изменив несколько строк кода, чтобы увидеть, как вы можете оптимизировать это, так как это не оправдано

Также ознакомьтесь с разделом «Получение даты и времени без времени» и « Оптимизация запросов с датами».

1
22.08.2008 16:39:21

@Darren Kopp

Будьте осторожны с МЕЖДУ, проверьте, как работает между датами в SQL Server?

0
22.08.2008 16:40:49

@Darren Kopp - вы можете использовать

set @date2 = '20201001'

это позволит вам потерять актерский состав.

footndale - вы можете использовать арифметику даты, чтобы убрать время. Что-то типа

select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0)

чтобы получить сегодняшнюю дату (без времени). Я полагаю, что это более эффективно, чем приведение туда-сюда.

1
22.08.2008 16:42:30
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate

Я думаю, вы обнаружите, что эти условия обеспечивают наилучшую возможную производительность. Это с радостью будет использовать индексы.

Я также очень уверен, что это правильно и даст правильные данные. Дальнейший расчет дат без временных отрезков не требуется.

0
25.01.2011 22:15:21