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)'
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!