2015-09-04 4 views
1

Мне нужно указать даты между двумя интервалами дат.Разница между и <= & > =

Я Пытался два запроса, как показано ниже

SELECT * FROM [dbo].[BudgetOffice] BUD 
      where Week  BETWEEN '2015-08-03' AND '2015-08-03'. 

SELECT * FROM [dbo].[BudgetOffice] BUD 
      where Week  >= '2015-08-03' AND Week <= '2015-08-03'. 

Оба Возвращения же результаты. Я думал, что

between

будет возвращать только значение лежит между входными значениями и исключить входные значения. Это верно?. Если обе те же, что и другие, возможны с производительностью.?

+5

[между] (https://msdn.microsoft.com/en-us/library/ms187922.aspx) - * BETWEEN возвращает TRUE, если значение test_expression больше или равно значению begin_expression и меньше или равно значению end_expression. * Что касается производительности, вы можете проверить план выполнения, и вы обнаружите, что оба дают один и тот же план выполнения. – ughai

+0

Есть некоторые проблемы, связанные с использованием оператора с датой, Аарон Бертран объяснил это в своей статье ['Что у BETWEEN и дьявола есть вместе?'] (Http://sqlblog.com/blogs/aaron_bertrand/archive/ 2011/10/19/what-do-between-and-the-devil-have-in-common.aspx) определенно стоит прочитать. –

+0

@ M.Ali Итак, я предполагаю, что переоценил навык среднего программиста в datetime, когда предположил, что генерация отчетов на ежемесячной основе будет использовать sth. например, 'SELECT * FROM data GROUP BY YEAR (datetime), MONTH (datetime)' ... – Alexander

ответ

0

Рассмотрим фрагмент кода:

SELECT * FROM list_of_integers_from_1_to_100 AS table 
WHERE table.number BETWEEN 2 AND 80; 

Этот метод является гораздо более удобным для чтения, чем "table.number> = 2 и table.number < = 80". BETWEEN вернет все значения, которые находятся между 2 и 80 (включая оба числа), которые фактически одинаковы.

Производительность, насколько я знаю, нет существенных отличий.

Существует несколько отличных вещей, связанных с BETWEEN, которые проще, чем использование операторов. Рассмотрим:

table.number NOT BETWEEN 2 AND 80 

И:

table.number < 2 AND table.number > 80 

Какой проще на первый взгляд? Я проголосую за первый, но, в конце концов, это ваш выбор.

Также, как указано в top answer in this question, BETWEEN может помочь вам избежать ненужных оценок. Я копипаст фрагмент из этой темы:

SELECT AVG(RAND(20091225) BETWEEN 0.2 AND 0.4) 
FROM t_source; 

--- 
0.1998 

SELECT AVG(RAND(20091225) >= 0.2 AND RAND(20091225) <= 0.4) 
FROM t_source; 

--- 
0.3199 
Смежные вопросы