PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come testare le date sovrapposte in PostgreSQL

In PostgreSQL, puoi usare OVERLAPS operatore per verificare la sovrapposizione di periodi di tempo.

La funzione restituisce true quando due periodi di tempo (definiti dai relativi punti finali) si sovrappongono e false quando non si sovrappongono.

Sintassi

Può essere utilizzato nei seguenti due modi:

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

In altre parole, fornisci una data/ora di inizio, quindi hai la possibilità di fornire una data/ora di fine o un periodo di tempo.

In particolare, gli endpoint possono essere specificati come coppie di date, orari o timestamp; o come data, ora o timestamp seguiti da un intervallo.

Quando viene fornita una coppia di valori, è possibile scrivere prima l'inizio o la fine; OVERLAPS prende automaticamente come inizio il valore precedente della coppia.

Esempio

Ecco un esempio di base da dimostrare.

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

Risultato:

True

Il risultato è vero perché entrambi i periodi di tempo si sovrappongono.

Eccolo di nuovo, ma questa volta cambio i periodi di tempo in modo che non si sovrappongano.

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

Risultato:

False

Endpoint comuni

È importante notare che ogni periodo di tempo è considerato rappresentare l'intervallo semiaperto start <= time < end , a meno che start e end sono uguali nel qual caso rappresenta quel singolo istante di tempo. Ciò significa che due periodi di tempo con solo un endpoint in comune non si sovrappongono.

Nell'esempio successivo, il secondo periodo di tempo inizia lo stesso giorno in cui termina il primo periodo di tempo.

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

Risultato:

False

Tuttavia, otteniamo un risultato diverso se entrambi i punti finali del primo periodo di tempo sono gli stessi:

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

Risultato:

True

Intervalli

Come accennato, il secondo punto finale può essere un intervallo.

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

Risultato:

True