2009-10-15 7 views
5

Existe-t-il une différence dans l'ordre de v1 et v2 dans une requête BETWEEN sur SQL Server?sql: ENTRE v1 ET v2

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

actuellement je n'obtiens aucun résultat si v1 est plus grand que v2. Est-ce seulement du sucre syntaxique pour

col >= v1 AND col <= v2 

ou prend-il vraiment toutes les valeurs entre les deux? sur mes observations actuelles, je suppose que c'est le premier cas.

Répondre

11

SQL Server 2008:

select 1 
where 5 between 1 and 7 

1 résultat

select 1 
where 5 between 7 and 1 

0 résultats

Sur la base de ces résultats, et le Postgre Docs Je l'hypothèse que la norme ANSI est la suivante (bien que Je ne peux pas trouver ce doc).

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

MISE À JOUR:

Le SQL-92 spec dit (citation):

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

Et vérifiez "sélectionnez 1 où 7 entre 7 et 1" - génial! –

+0

les exemples ne sont pas syntaxiquement valide dans MySQL –

+0

(vous devez insérer 'de dual' pour les faire fonctionner) –

11

Oui! L'ordre des arguments dans le prédicat BETWEEN importe. Et, oui, il s'agit de sucre [la plupart du temps] syntaxique pour le formulaire de comparaison AND-ed.

La « la plupart du temps », au-dessus vient du fait que tout logiquement équivalent, les deux expressions peuvent (probablement dans le passé ...) recevoir un plan de requête distincte sur certains serveurs SQL. On peut supposer que la plupart des serveurs, de nos jours, offrent une gestion optimale de ce type de filtre, quelle que soit sa forme.

3

Oui, vous avez raison, est-ce seulement du sucre syntaxique pour la construction que vous avez mentionnée.

Questions connexes