Condición de rango BETWEEN
Una condición BETWEEN
prueba expresiones para incluirlas en un rango de valores, con las palabras clave BETWEEN
y AND
.
Sintaxis
expression [ NOT ] BETWEEN expression AND expression
Las expresiones pueden ser tipos de datos de fecha y hora, numéricos o caracteres, pero deben ser compatibles. El rango es inclusivo.
Ejemplos
El primer ejemplo cuenta cuántas transacciones registraron ventas de 2, 3 o 4 tickets:
select count(*) from sales
where qtysold between 2 and 4;
count
--------
104021
(1 row)
La condición de rango incluye los valores de inicio y final.
select min(dateid), max(dateid) from sales
where dateid between 1900 and 1910;
min | max
-----+-----
1900 | 1910
La primera expresión en una condición de rango debe ser el valor más bajo y la segunda expresión, el valor más alto. En el siguiente ejemplo SIEMPRE se devuelven cero filas debido a los valores de las expresiones:
select count(*) from sales
where qtysold between 4 and 2;
count
-------
0
(1 row)
Sin embargo, aplicar el modificador NOT invertirá la lógica y producirá un conteo de todas las filas:
select count(*) from sales
where qtysold not between 4 and 2;
count
--------
172456
(1 row)
La siguiente consulta devuelve una lista de lugares que tienen entre 20 000 y 50 000 asientos:
select venueid, venuename, venueseats from venue
where venueseats between 20000 and 50000
order by venueseats desc;
venueid | venuename | venueseats
---------+-------------------------------+------------
116 | Busch Stadium | 49660
106 | Rangers BallPark in Arlington | 49115
96 | Oriole Park at Camden Yards | 48876
...
(22 rows)
En el siguiente ejemplo, se demuestra el uso de BETWEEN para valores de fecha:
select salesid, qtysold, pricepaid, commission, saletime
from sales
where eventid between 1000 and 2000
and saletime between '2008-01-01' and '2008-01-03'
order by saletime asc;
salesid | qtysold | pricepaid | commission | saletime
--------+---------+-----------+------------+---------------
65082 | 4 | 472 | 70.8 | 1/1/2008 06:06
110917 | 1 | 337 | 50.55 | 1/1/2008 07:05
112103 | 1 | 241 | 36.15 | 1/2/2008 03:15
137882 | 3 | 1473 | 220.95 | 1/2/2008 05:18
40331 | 2 | 58 | 8.7 | 1/2/2008 05:57
110918 | 3 | 1011 | 151.65 | 1/2/2008 07:17
96274 | 1 | 104 | 15.6 | 1/2/2008 07:18
150499 | 3 | 135 | 20.25 | 1/2/2008 07:20
68413 | 2 | 158 | 23.7 | 1/2/2008 08:12
Tenga en cuenta que, aunque el intervalo de BETWEEN es inclusivo, las fechas tienen un valor de hora predeterminado de 00:00:00. La única fila válida del 3 de enero para la consulta de ejemplo sería una fila con un valor de saletime de 1/3/2008 00:00:00
.