2009-10-15 14 views
5

Gibt es einen Unterschied in der Reihenfolge von v1 und v2 in einer BETWEEN-Abfrage auf SQL Server?sql: BETWEEN v1 UND v2

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

Derzeit bekomme ich keine Ergebnisse, wenn v1 größer als v2 ist. Ist dies nur syntaktischer Zucker für

col >= v1 AND col <= v2 

oder dauert es, wirklich alle Werte zwischen den beiden? Ich vermute, dass es der erste Fall ist.

Antwort

11

SQL Server 2008:

select 1 
where 5 between 1 and 7 

1 Ergebnis

select 1 
where 5 between 7 and 1 

0 Ergebnisse

Basierend auf diesen Ergebnissen und der Postgre Docs Ich würde vermuten, dass die ANSI-Norm ist wie folgt (obwohl Ich kann das Dokument nicht finden).

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

UPDATE:

Die SQL-92-Spezifikation sagt (Zitat):

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

Und check out "wählen 1 wo 7 zwischen 7 und 1" - genial! –

+0

die Beispiele sind nicht syntaktisch gültig in MySQL –

+0

(Sie müssen 'von Dual' einfügen, um sie zum Laufen zu bringen) –

11

Ja! Die Reihenfolge der Argumente in der BETWEEN-Prädikatsmaterie. Und ja, das ist [meist] syntaktischer Zucker für die AND-ed Vergleichsform.

Die „meistens“, kommt oben aus der Tatsache, dass während logisch äquivalent können die beiden Ausdrücke (wahrscheinlich in der Vergangenheit ...) auf einigen SQL-Server einen eindeutigen Abfrage-Plan erhalten. Es ist eine sichere Vermutung, dass die meisten Server heutzutage einen optimalen Umgang mit diesem Filtertyp bieten, unabhängig von seiner Form.

3

Ja, Sie haben Recht, ist es nur syntaktischer Zucker für das Konstrukt, das Sie erwähnten.

Verwandte Themen