Сведения о вопросе

Junior

13:03, 8th August, 2020

Теги

Сравнение дат вступления в силу в SQL

Просмотров: 535   Ответов: 5

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

В настоящее время это, как я сделал это в прошлом на сервере MS SQL. Просто беспокоюсь о дате, а не о времени. Я использую 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))



  Сведения об ответе

lesha

18:43, 21st August, 2020

Это ужасно, посмотрите только в базе данных можно получить улучшение 1000% +, изменив несколько строк кода , чтобы увидеть, как вы можете оптимизировать это, так как это не sargable

Также проверьте Get Datetime без времени и оптимизации запросов с датами


  Сведения об ответе

SEEYOU

23:53, 8th August, 2020

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

set @date2 = '20201001'

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

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

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

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


  Сведения об ответе

pumpa

20:08, 4th August, 2020

AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate

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

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


  Сведения об ответе

padenie

08:51, 17th August, 2020

@Darren Копп

Будьте осторожны с BETWEEN, проверьте, как работает Between с датами в SQL сервере?


  Сведения об ответе

DINO

16:46, 18th August, 2020

пробовать

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)


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться