sql >> Database >  >> RDS >> PostgreSQL

Hoe te testen op overlappende datums in PostgreSQL

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

  1. PostgreSQL- en C#-gegevenstypen

  2. Een samengestelde externe sleutel maken in SQL Server (T-SQL-voorbeeld)

  3. Hoe Glassfish Server handmatig in Eclipse te configureren

  4. Records tussen 2 datums ophalen in MySQL