In PostgreSQL kunt u de OVERLAPS
. gebruiken operator om te testen op overlappende tijdsperioden.
De functie retourneert true wanneer twee tijdsperioden (gedefinieerd door hun eindpunten) elkaar overlappen, en false wanneer ze elkaar niet overlappen.
Syntaxis
Het kan op de volgende twee manieren worden gebruikt:
(start1, end1) OVERLAPS (start2, end2)
(start1, length1) OVERLAPS (start2, length2)
Met andere woorden, u geeft een startdatum/-tijd op, daarna heeft u de mogelijkheid om ofwel een einddatum/-tijd of een tijdsduur op te geven.
Meer specifiek kunnen de eindpunten worden gespecificeerd als paren van datums, tijden of tijdstempels; of als een datum, tijd of tijdstempel gevolgd door een interval.
Wanneer een paar waarden wordt opgegeven, kan het begin of het einde eerst worden geschreven; OVERLAPS
neemt automatisch de eerdere waarde van het paar als start.
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren.
SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
(date '2022-02-09', date '2022-03-10');
Resultaat:
True
Het resultaat is waar omdat beide tijdsperioden elkaar overlappen.
Hier is het weer, maar deze keer verander ik de tijdsperioden zodat ze elkaar niet overlappen.
SELECT (date '2022-01-09', date '2022-02-08') OVERLAPS
(date '2022-02-09', date '2022-03-08');
Resultaat:
False
Algemene eindpunten
Het is belangrijk op te merken dat elke tijdsperiode wordt beschouwd als het halfopen interval start
<=
time
<
end
, tenzij start
en end
gelijk zijn, in welk geval het dat ene moment vertegenwoordigt. Dit betekent dat twee tijdsperioden met slechts een gemeenschappelijk eindpunt elkaar niet overlappen.
In het volgende voorbeeld begint de tweede periode op dezelfde dag dat de eerste periode eindigt.
SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
(date '2022-02-10', date '2022-03-10');
Resultaat:
False
We krijgen echter een ander resultaat als beide eindpunten van de eerste tijdsperiode hetzelfde zijn:
SELECT (date '2022-01-09', date '2022-01-09') OVERLAPS
(date '2022-01-09', date '2022-02-10');
Resultaat:
True
Intervallen
Zoals gezegd kan het tweede eindpunt een interval zijn.
SELECT (date '2022-01-09', interval '32 days') OVERLAPS
(date '2022-02-09', date '2022-03-10');
Resultaat:
True