2014/04/08

BETWEEN

Buen día, he estado leyendo algunas preguntas en el foro de Microsoft en línea y algunos de los problemas planteados se debe a la mala comprensión del BETWEEN. Trataré de explicar un poco más, anteriormente ya lo había hecho en el post FILTRAR POR RANGO DE FECHAS.

Primero necesitamos crear una tabla de pruebas:
CREATE TABLE tablaValores ( valor DECIMAL(3,2) )
Insertamos algunos valores a nuestra tabla:
INSERT INTO tablaValores
VALUES( 1 ) , ( 2 ) , ( 3 ) , ( 4 ) , ( 5  )
Verificamos el contenido:
SELECT * FROM tablaValores
Ahora aplicamos una consulta con BETWEEN:
SELECT * FROM tablaValores
WHERE valor BETWEEN 2 AND 4
Podemos observar que la consulta anterior es similar a la siguiente:
Ahora agregaremos otros valores con decimales:
INSERT INTO tablaValores
VALUES( 1.88 ) , ( 1.99 ) , ( 4.01 ) , ( 4.10 ) , ( 4.19 ) 

Ahora el contenido de nuestra tabla será:  
SELECT * FROM tablaValores ORDER BY valor

Aplicamos nuevamente la consulta:  
SELECT * FROM tablaValores
WHERE valor BETWEEN 2 AND 4
 
Es obvio  que 1.99 no es mayor igual que 2 y 4.01 no es menor igual que 4, por lo tanto el resultado sigue siendo el mismo.
Pero si queremos que la consulta extraiga también los valores con entero 4 con cualquier decimal por valor, sin incluir el entero 5, no podemos utilizar BETWEEN:
SELECT * FROM tablaValores
WHERE valor BETWEEN 2 AND 5
ORDER BY valor

Debemos utilizar >= y <
SELECT * FROM tablaValores
WHERE valor >=2 AND valor < 5
ORDER BY valor
Al manejar tipos de datos relacionados con fechas y horas, el comportamiento es parecido, tal y como lo explique en el post FILTRAR POR RANGO DE FECHAS.

El comportamiento del BETWEEN es idéntico a

columna >= valor AND columna <= valor

y el de un NOT BETWEEN:

columna < valor AND columna > valor
SELECT * FROM tablaValores
WHERE valor NOT BETWEEN 2 AND 4
ORDER BY valor

SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario