SQL: entre V1 y V2
-
21-09-2019 - |
Pregunta
¿Hay una diferencia en el orden de v1 y v2 en un ENTRE consulta en SQL Server?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
Actualmente no consigo ningún resultado si V1 es mayor que V2. ¿Es este azúcar sintáctica para solamente
col >= v1 AND col <= v2
o realmente toma todos los valores entre los dos? en mis observaciones actuales supongo que es el primer caso.
Solución
SQL Server 2008:
select 1
where 5 between 1 and 7
1 resultado
select 1
where 5 between 7 and 1
0 resultados
Sobre la base de estos resultados, y la Postgre Docs me planteo la hipótesis de que la Norma ANSI es el siguiente (aunque no puedo encontrar que doc).
a between x and y
==
a >= x AND a <= y
ACTUALIZACIÓN:
La especificación dice SQL-92 (cita):
"X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z"
Otros consejos
Sí! El orden de los argumentos en el asunto entre predicado. Y, sí, esto es [sobre todo] azúcar sintáctico para la forma de comparación y de opinión.
La "mayoría", por encima viene del hecho de que si bien lógicamente equivalente , las dos expresiones de mayo (probablemente en el pasado ...) recibir un plan de consulta distinta en algunos servidores SQL. Es una suposición segura que la mayoría de los servidores, en la actualidad, proporcionan un manejo óptimo de este tipo de filtro, independientemente de su forma.
Sí, tienes razón, es sólo azúcar sintáctico para el constructo que usted ha mencionado.