Tema SQL
Tipos rango (PostgreSQL)
Tipos int4range, tstzrange, daterange representan intervalos con límites inclusivos/exclusivos. Operadores @> contiene punto, && solapa, - unión.
Descripción
Los rangos modelan reservas, versionado, ventanas de validez sin dos columnas de inicio y fin separadas (aunque internamente existen). Se escriben con cast a daterange o tstzrange según el caso. Índice GiST o SP-GiST para consultas de solapamiento. Restricción EXCLUDE evita solapes entre filas. SQL Server no tiene tipos rango nativos; MySQL tampoco.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
tstzrange('[2026-04-01 00:00+02, 2026-04-30 23:59+02]')
SELECT int4range(1, 10) @> 5;
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Límites
- [] vs () para inclusión de extremos.
- EXCLUDE
- ALTER TABLE con EXCLUDE USING gist para impedir solapes de rangos.
Ejemplos
Ejemplo 1
SELECT daterange('2026-04-01', '2026-04-30', '[]') @> CURRENT_DATE;
SELECT * FROM reservas
WHERE durante && tstzrange(now(), now() + interval '1 hour');
Ejemplo 2
SELECT numrange(1.0, 9.9) && numrange(5,6) AS mid;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.