Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Hari Perniagaan Antara Dua Tarikh dalam MySQL (Tanpa Cuti)?

Bagaimana untuk Mengira Hari Perniagaan Antara Dua Tarikh dalam MySQL (Tanpa Cuti)?

Barbara Streisand
Lepaskan: 2025-01-16 18:10:09
asal
835 orang telah melayarinya

How to Calculate Business Days Between Two Dates in MySQL (Without Holidays)?

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>
Salin selepas log masuk
Salin selepas log masuk

Andaian dan Nota:

  • Tarikh tamat (@E) tidak boleh sebelum tarikh mula (@S).
  • Serupa dengan DATEDIFF, jika tarikh mula dan tarikh tamat adalah sama, bilangan hari bekerja akan menjadi sifar.
  • Cuti tidak diambil kira.

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>
Salin selepas log masuk
Salin selepas log masuk

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!

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