Сравнение дат между и <> - PullRequest
1 голос
/ 31 октября 2019

У меня есть вопрос о производительности ключевого слова BETWEEN по сравнению с использованием операторов <и> для сравнения дат верхней и нижней границ.

Пример:

WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1

WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()

Оба запросавыше должно вывести точно такое же количество строк, однако я прав, предполагая, что ключевое слово BETWEEN выполняет инклюзивное (> = или <=) сравнение за кулисами, которое не так эффективно, как выполнение сравнения <или> из второго запроса

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Эти два не совпадают!

WHERE EncDate BETWEEN '2010-04-30' AND GETDATE() - 1

WHERE EncDate > '2010-04-29' AND EncDate < GETDATE()

Они будут давать одинаковый набор результатов , если EncDate - это дата без компонента времени . В противном случае они различаются.

Общая рекомендация заключается в использовании:

WHERE EncDate >= '2010-04-30' AND 
      EncDate < CONVERT(DATE, GETDATE())

Это имеет то же значение в отношении наличия или отсутствия компонента времени.

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

Аарон Бертран очень хорошо обсудил использование BETWEEN стипы данных дата / время, называемые Что общего между дьяволом и общим .

0 голосов
/ 31 октября 2019

Согласно MSDN: BETWEEN

BETWEEN возвращает TRUE, если значение test_expression больше или равно значению begin_expression и меньше или равно значениюend_expression.

Итак, вы правы, это включено.

Что касается первой части вашего вопроса о производительности, я считаю, что BETWEEN это просто псевдоним синтаксиса использования >= и <=. Это просто, чтобы упростить и сделать запрос более читабельным.

Мое предположение основано на следующих потоках:

sql: МЕЖДУ v1 и v2

SQL: МЕЖДУ <= и> =

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