PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Menguji Tanggal yang Tumpang Tindih di PostgreSQL

Di PostgreSQL, Anda dapat menggunakan OVERLAPS operator untuk menguji periode waktu yang tumpang tindih.

Fungsi mengembalikan nilai true ketika dua periode waktu (ditentukan oleh titik akhirnya) tumpang tindih, dan salah jika tidak tumpang tindih.

Sintaks

Ini dapat digunakan dengan dua cara berikut:

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

Dengan kata lain, Anda memberikan tanggal/waktu mulai, lalu Anda memiliki opsi untuk memberikan tanggal/waktu akhir atau jangka waktu.

Lebih khusus lagi, titik akhir dapat ditentukan sebagai pasangan tanggal, waktu, atau stempel waktu; atau sebagai tanggal, waktu, atau cap waktu diikuti dengan interval.

Ketika sepasang nilai diberikan, baik awal atau akhir dapat ditulis terlebih dahulu; OVERLAPS secara otomatis mengambil nilai pasangan sebelumnya sebagai awal.

Contoh

Berikut adalah contoh dasar untuk didemonstrasikan.

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

Hasil:

True

Hasilnya benar karena kedua periode waktu tumpang tindih.

Ini dia lagi, tapi kali ini saya mengubah periode waktu agar tidak tumpang tindih.

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

Hasil:

False

Titik Akhir Umum

Penting untuk dicatat bahwa setiap periode waktu dianggap mewakili interval setengah terbuka start <= time <= end , kecuali start dan end adalah sama dalam hal ini mewakili satu waktu instan. Ini berarti bahwa dua periode waktu dengan hanya titik akhir yang sama tidak tumpang tindih.

Pada contoh berikutnya, periode waktu kedua dimulai pada hari yang sama dengan periode waktu pertama berakhir.

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

Hasil:

False

Namun, kami mendapatkan hasil yang berbeda jika kedua titik akhir periode waktu pertama sama:

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

Hasil:

True

Interval

Seperti yang disebutkan, titik akhir kedua dapat berupa interval.

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

Hasil:

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. koneksi lokal docker postgres pgadmin

  2. connection.select_value hanya mengembalikan string di postgres dengan permata pg

  3. Batas Kata Regex PostgreSQL?

  4. PostgreSQL 11:Peninjau Patch untuk Mempartisi Patch

  5. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?