Хотите знать, есть ли лучшее, почему в предложении 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))
пытаться
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)
Это ужасно, взгляните на « Только в базе данных». Можете ли вы получить улучшение на 1000% и более, изменив несколько строк кода, чтобы увидеть, как вы можете оптимизировать это, так как это не оправдано
Также ознакомьтесь с разделом «Получение даты и времени без времени» и « Оптимизация запросов с датами».
@Darren Kopp
Будьте осторожны с МЕЖДУ, проверьте, как работает между датами в SQL Server?
@Darren Kopp - вы можете использовать
set @date2 = '20201001'
это позволит вам потерять актерский состав.
footndale - вы можете использовать арифметику даты, чтобы убрать время. Что-то типа
select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0)
чтобы получить сегодняшнюю дату (без времени). Я полагаю, что это более эффективно, чем приведение туда-сюда.
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate
Я думаю, вы обнаружите, что эти условия обеспечивают наилучшую возможную производительность. Это с радостью будет использовать индексы.
Я также очень уверен, что это правильно и даст правильные данные. Дальнейший расчет дат без временных отрезков не требуется.
EffectiveEndDate
?