Perbandingan julat tarikh SQL
Apabila bekerja dengan julat tarikh yang disimpan dalam pangkalan data, mungkin perlu untuk menentukan sama ada julat tarikh tertentu bertindih dengan mana-mana julat sedia ada. Ini adalah masalah berulang dalam pangkalan data SQL.
Salah satu cara untuk menyelesaikan masalah ini ialah menyongsangkan logik perbandingan. Daripada mencari julat yang bertindih dengan julat tertentu, kami sedang mencari julat yang tidak bertindih. Dengan mengenal pasti tempoh yang tidak bertindih, kita boleh membuat kesimpulan bahawa tempoh yang tinggal adalah tempoh yang bertindih.
Untuk menggambarkan logik ini, mari kita periksa contoh berikut:
<code> |-------------------| 与之比较 |---------| 包含在内 |----------| 包含在内,起始时间相同 |-----------| 包含在内,结束时间相同 |-------------------| 包含在内,起始和结束时间相同 |------------| 未完全包含,起始时间重叠 |---------------| 未完全包含,结束时间重叠 |-------------------------| 起始时间重叠,范围更大 |-----------------------| 结束时间重叠,范围更大 |------------------------------| 完全重叠</code>
Seperti yang dapat dilihat daripada rajah, tempoh yang tidak bertindih dengan tempoh perbandingan sama ada bermula selepas tempoh perbandingan tamat atau berakhir sebelum tempoh perbandingan bermula.
Sebaliknya, tempoh yang bertindih dengan tempoh perbandingan termasuk dalam kategori berikut:
Menerjemahkan logik ini ke dalam SQL, kami boleh menggunakan pertanyaan berikut untuk mendapatkan semula semua zaman yang bertindih dengan zaman semakan yang diberikan:
<code class="language-sql">SELECT * FROM periods WHERE range_start < @check_period_end AND range_end > @check_period_start;</code>
Dengan membalikkan logik untuk mencari zaman yang tidak bertindih, kami boleh mengenal pasti dan mengecualikan zaman ini dengan berkesan daripada keputusan, meninggalkan senarai zaman yang sepadan.
Atas ialah kandungan terperinci Bagaimanakah Kita Boleh Mengenalpasti Julat Tarikh Bertindih dengan Cekap dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!