2009-10-15 3 views
5

Есть ли разница в порядке v1 и v2 в запросе BETWEEN на SQL Server?sql: BETWEEN v1 И v2

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

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

col >= v1 AND col <= v2 

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

ответ

11

SQL Server 2008:

select 1 
where 5 between 1 and 7 

1 результат

select 1 
where 5 between 7 and 1 

0 Результаты

Основываясь на этих результатах, и Postgre Docs я бы предположить, что стандарт ANSI выглядит следующим образом (хотя Я не могу найти этот документ).

a between x and y 
== 
a >= x AND a <= y 

UPDATE:

SQL-92-спецификация говорит (цитирую):

"X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z" 
+0

И проверьте «выберите 1, где 7 между 7 и 1» - удивительный! –

+0

примеры не являются синтаксически действительными в MySQL –

+0

(вам нужно вставить 'from dual', чтобы заставить их работать) –

11

Да! Порядок аргументов в предикате BETWEEN. И, да, это [в основном] синтаксический сахар для формы сравнения AND-ed.

«в основном», выше исходит из того, что в то время как логически эквивалентных, два выражения могут (вероятно, в прошлом ...) получить четкий план запроса на некоторых серверах SQL. Можно с уверенностью предположить, что большинство серверов в настоящее время обеспечивают оптимальную обработку этого типа фильтра независимо от его формы.

3

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

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

  • Нет связанных вопросов^_^