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