2009-10-15 10 views
5

Czy istnieje różnica w kolejności v1 i v2 w zapytaniu BETWEEN na serwerze SQL?sql: MIĘDZY v1 i v2

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

Obecnie nie otrzymuję żadnych wyników, jeśli v1 jest większy niż v2. Czy jest to tylko cukier składniowy dla danego obiektu, czy też rzeczywiście przyjmuje on wszystkie wartości między tymi dwoma składnikami? w moich bieżących obserwacjach myślę, że to pierwszy przypadek.

Odpowiedz

11

SQL Server 2008:

select 1 
where 5 between 1 and 7 

1 wynik

select 1 
where 5 between 7 and 1 

0 wyniki

Na podstawie tych wyników, a Postgre Docs chciałbym postawić hipotezę, że norma ANSI jest następujący (chociaż Nie mogę znaleźć tego doktora).

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

UPDATE:

SQL-92 specyfikacja mówi (cytuję):

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

I sprawdź "wybierz 1, gdzie 7 od 7 do 1" - niesamowite! –

+0

przykłady nie są poprawne pod względem składni w MySQL –

+0

(musisz wstawić 'od dual', aby je działały) –

11

Tak! Kolejność argumentów w materiale predykatu BETWEEN. I, tak, jest to [głównie] cukier syntaktyczny do formularza porównywania AND-ED.

z „głównie”, powyżej pochodzi z faktu, że podczas logicznie równoważne, dwa wyrażenia mogą (prawdopodobnie w przeszłości ...) otrzymać odrębny plan kwerend na niektórych serwerach SQL. Można się bezpiecznie domyślić, że większość serwerów, w dzisiejszych czasach, zapewnia optymalną obsługę tego typu filtru, niezależnie od jego formy.

3

Tak, masz rację, to tylko cukier syntaktyczny do konstrukcji, o której wspomniałeś.

Powiązane problemy