Fungsi MySQL mengira bilangan hari bekerja antara dua tarikh (tidak termasuk cuti)
Fungsi NETWORKDAYS() Excel dengan mudah boleh mengira bilangan hari bekerja antara dua tarikh, dan MySQL juga memerlukan fungsi yang serupa. Walaupun mengendalikan cuti adalah lebih kompleks, penyelesaian yang dipermudahkan diperlukan di sini yang tidak mengambil kira cuti.
Penyelesaian:
Ungkapan berikut secara berkesan mengira bilangan hari bekerja antara tarikh mula @S dan tarikh tamat @E:
<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
Andaian dan Nota:
Pembinaan rentetan angka:
Rentetan nombor dibina dengan teliti sebagai jadual tarikh mula dan tamat, dengan Isnin (WEEKDAY 0) sebagai titik permulaan untuk baris dan lajur. Garisan pepenjuru dari sudut kiri atas ke sudut kanan bawah berlapik dengan sifar, menunjukkan bahawa tiada hari bekerja antara tarikh dalam minggu yang sama (contohnya, Isnin hingga Isnin).
Bergerak secara menyerong ke kanan, setiap hari mempunyai kiraan hari bekerja bukan sifar hanya jika hari itu bukan hujung minggu (hari tidak bekerja). Apabila penghujung baris dicapai, kiraan kembali ke permulaan baris yang sama. Proses ini berterusan sehingga pepenjuru seterusnya ditemui.
Ekspresi dipertingkat:
Selepas pengubahsuaian, ungkapan yang dipertingkatkan ialah:
<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>
Ungkapan yang dipertingkatkan ini menggunakan rentetan angka yang dipertingkatkan, memberikan hasil yang lebih tepat.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Hari Perniagaan Antara Dua Tarikh dalam MySQL (Tanpa Cuti)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!