Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh mencari julat tarikh bertindih dengan cekap dalam PostgreSQL?

Bagaimanakah saya boleh mencari julat tarikh bertindih dengan cekap dalam PostgreSQL?

Susan Sarandon
Lepaskan: 2025-01-05 10:41:40
asal
688 orang telah melayarinya

How Can I Efficiently Find Overlapping Date Ranges in PostgreSQL?

Mencari Julat Tarikh Bertindih dalam PostgreSQL

Apabila bekerja dengan julat tarikh dalam PostgreSQL, mengenal pasti pertindihan adalah tugas yang penting. Pertanyaan yang disediakan cuba mencari pemain yang berada dalam pasukan pada tahun-tahun tertentu tetapi mengandungi ralat.

Isu dengan Pertanyaan yang Disediakan

Pertanyaan termasuk syarat ANTARA ( DATE_PART('YEAR',date_join) >= ? DATE_PART('YEAR',tarikh_cuti) <= ?), yang menyemak sama ada komponen tahun lajur date_join dan date_leave berada dalam julat yang ditentukan. Walau bagaimanapun, ia menggunakan operator >= dan <= secara salah, yang termasuk sempadan atas (akhir tahun).

Pertanyaan Dibetulkan

Untuk mencari pertindihan dengan betul julat, kita perlu melaraskan keadaan untuk mengecualikan bahagian atas terikat:

SELECT * 
FROM   contract 
JOIN   team USING (name_team) 
JOIN   player USING(name_player) 
WHERE  name_team = ? 
AND    DATE_PART('YEAR',date_join) >= ? 
AND    DATE_PART('YEAR',date_leave) < ?</p>
<p><strong>Penyelesaian Alternatif Menggunakan Jenis Julat</strong></p>
<p>PostgreSQL versi 9.2 dan kemudiannya menyediakan sokongan untuk jenis julat. Berikut ialah pertanyaan yang menggunakan jenis julat dan operator &&& untuk mencari julat bertindih:</p>
<pre class="brush:php;toolbar:false">SELECT DISTINCT name_player 
FROM   contract
WHERE  name_team = ? 
AND    daterange(date_join, date_leave) &&&
       daterange '[2009-01-01,2010-01-01)'
Salin selepas log masuk

Pertanyaan ini memanfaatkan operator bertindih &&& dan jenis julat yang ditakrifkan khas untuk mencari julat tarikh bertindih tanpa memerlukan sempadan yang jelas semak.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencari julat tarikh bertindih dengan cekap dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan