PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak testować pod kątem nakładających się dat w PostgreSQL

W PostgreSQL możesz użyć OVERLAPS operatora, aby przetestować nakładające się okresy czasu.

Funkcja zwraca prawdę, gdy dwa okresy czasu (zdefiniowane przez ich punkty końcowe) nakładają się na siebie, i fałsz, gdy się nie nakładają.

Składnia

Można go używać na dwa sposoby:

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

Innymi słowy, podajesz datę/godzinę rozpoczęcia, a następnie masz możliwość podania daty/godziny zakończenia lub czasu.

Dokładniej, punkty końcowe można określić jako pary dat, godzin lub znaczników czasu; lub jako datę, godzinę lub znacznik czasu, po których następuje interwał.

Gdy podana jest para wartości, najpierw można zapisać początek lub koniec; OVERLAPS automatycznie przyjmuje wcześniejszą wartość pary jako początek.

Przykład

Oto podstawowy przykład do zademonstrowania.

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

Wynik:

True

Wynik jest prawdziwy, ponieważ oba okresy nakładają się na siebie.

Oto znowu, ale tym razem zmieniam przedziały czasowe, aby się nie nakładały.

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

Wynik:

False

Typowe punkty końcowe

Ważne jest, aby pamiętać, że każdy okres jest uważany za reprezentujący interwał półotwarty start <= time < end , chyba że start i end są równe, w którym to przypadku reprezentuje tę pojedynczą chwilę czasu. Oznacza to, że dwa okresy czasu ze wspólnym punktem końcowym nie nakładają się.

W następnym przykładzie drugi okres rozpoczyna się tego samego dnia, w którym kończy się pierwszy okres.

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

Wynik:

False

Jednak otrzymamy inny wynik, jeśli oba punkty końcowe pierwszego okresu są takie same:

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

Wynik:

True

Interwały

Jak wspomniano, drugim punktem końcowym może być interwał.

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

Wynik:

True

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ponownie wykorzystać wynik dla klauzul SELECT, WHERE i ORDER BY?

  2. Jak zaimportować dane z CSV do tabeli Postgres za pomocą pgAdmin 3?

  3. Zwróć uniksowy znacznik czasu w PostgreSQL

  4. Date_trunc w PostgreSQL w mySQL

  5. pgFincore 1.2, rozszerzenie PostgreSQL