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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top