Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam MySQL?

Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-19 13:12:10148semak imbas

How to Identify Overlapping Date Ranges in MySQL?

Mengenal pasti Julat Tarikh Bertindih dalam MySQL

Masalah:

Mari kita pertimbangkan jadual yang menyimpan sesi acara dengan tarikh mula dan tamat masing-masing. Kami menyasarkan untuk memastikan tiada konflik antara sesi. Khususnya, kami ingin mencari sesi bertindih apabila cuba memasukkan sesi baharu dalam julat tarikh tertentu.

Pertanyaan:

Untuk mengenal pasti kemungkinan konflik, kami boleh menggunakan pertanyaan berikut:

SELECT *
FROM session
WHERE "2010-01-05" BETWEEN start_date AND end_date
   OR "2010-01-25" BETWEEN start_date AND end_date
   OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date;

Memahami Pertanyaan:

Pertanyaan ini menyemak tiga syarat yang menunjukkan kemungkinan pertindihan:

  1. Jika tarikh mula yang dicadangkan ("2010-01-05") berada dalam sesi sedia ada julat tarikh (ANTARA tarikh_mula DAN tarikh_akhir).
  2. Jika tarikh tamat yang dicadangkan ("2010-01-25") termasuk dalam julat tarikh sesi sedia ada (ANTARA tarikh_mula DAN tarikh_akhir).
  3. Jika julat tarikh yang dicadangkan (dari "2010-01-05" hingga "2010-01-25 ") bertindih sepenuhnya dengan julat tarikh sesi sedia ada (>= tarikh_mula DAN <= tarikh_akhir).

Pendekatan Alternatif:

Pertanyaan alternatif yang menjamin hasil yang tepat:

SELECT *
FROM session
WHERE new_start < existing_end
      AND new_end   > existing_start;

Penjelasan:

Pertanyaan ini menggunakan penilaian logik berdasarkan empat pembolehubah:

  • new_start: Tarikh mula sesi yang dicadangkan ("2010-01-05").
  • new_end: Tarikh tamat sesi yang dicadangkan ("2010-01 -25").
  • existing_start: Tarikh mula sedia ada sesi.
  • existing_end: Tarikh tamat sesi sedia ada.

Pertanyaan mengembalikan sesi bertindih jika tarikh mula sesi baharu adalah sebelum tarikh tamat mana-mana sesi sedia ada, DAN tarikh tamat sesi baharu adalah selepas tarikh mula mana-mana sesi sedia ada.

Atas ialah kandungan terperinci Bagaimana untuk Mengenalpasti Julat Tarikh Bertindih dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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