sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo probar fechas superpuestas en PostgreSQL

En PostgreSQL, puede usar OVERLAPS operador para probar los períodos de tiempo superpuestos.

La función devuelve verdadero cuando dos períodos de tiempo (definidos por sus extremos) se superponen y falso cuando no se superponen.

Sintaxis

Se puede utilizar de las dos formas siguientes:

(start1, end1) OVERLAPS (start2, end2)
(start1, length1) OVERLAPS (start2, length2)

En otras palabras, proporciona una fecha/hora de inicio, luego tiene la opción de proporcionar una fecha/hora de finalización o un período de tiempo.

Más específicamente, los puntos finales se pueden especificar como pares de fechas, horas o marcas de tiempo; o como fecha, hora o marca de tiempo seguida de un intervalo.

Cuando se proporciona un par de valores, se puede escribir primero el inicio o el final; OVERLAPS toma automáticamente el valor anterior del par como inicio.

Ejemplo

Aquí hay un ejemplo básico para demostrarlo.

SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
       (date '2022-02-09', date '2022-03-10');

Resultado:

True

El resultado es verdadero porque ambos períodos de tiempo se superponen.

Aquí está de nuevo, pero esta vez cambio los períodos de tiempo para que no se superpongan.

SELECT (date '2022-01-09', date '2022-02-08') OVERLAPS
       (date '2022-02-09', date '2022-03-08');

Resultado:

False

Puntos finales comunes

Es importante tener en cuenta que cada período de tiempo se considera que representa el intervalo semiabierto start <= time < end , a menos que start y end son iguales en cuyo caso representa ese único instante de tiempo. Esto significa que dos períodos de tiempo con solo un punto final en común no se superponen.

En el siguiente ejemplo, el segundo período de tiempo comienza el mismo día que finaliza el primer período de tiempo.

SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
       (date '2022-02-10', date '2022-03-10');

Resultado:

False

Sin embargo, obtenemos un resultado diferente si ambos puntos finales del primer período son iguales:

SELECT (date '2022-01-09', date '2022-01-09') OVERLAPS
       (date '2022-01-09', date '2022-02-10');

Resultado:

True

Intervalos

Como se mencionó, el segundo punto final puede ser un intervalo.

SELECT (date '2022-01-09', interval '32 days') OVERLAPS
       (date '2022-02-09', date '2022-03-10');

Resultado:

True