Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengira Hari Perniagaan dengan Cekap Antara Dua Tarikh dalam MySQL Tanpa Menggunakan Jadual Percutian?

Bagaimanakah Saya Boleh Mengira Hari Perniagaan dengan Cekap Antara Dua Tarikh dalam MySQL Tanpa Menggunakan Jadual Percutian?

DDD
DDDasal
2025-01-16 17:54:12412semak imbas

How Can I Efficiently Calculate Business Days Between Two Dates in MySQL Without Using a Holiday Table?

Fungsi mengira hari bekerja MySQL

Fungsi NETWORKDAYS() Excel boleh mengira dengan cekap bilangan hari bekerja antara dua tarikh yang ditentukan. Dalam MySQL, fungsi serupa sering diperlukan, terutamanya yang tidak termasuk cuti untuk kesederhanaan.

Salah satu cara ialah menggunakan ungkapan berikut:

<code class="language-sql">5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)</code>

Untuk menggunakan ungkapan ini dengan berkesan:

  1. Pastikan tarikh tamat (@E) tidak lebih awal daripada tarikh mula (@S).
  2. Ungkapan ini berfungsi seperti DATEDIFF, jika tarikh mula dan tarikh tamat adalah sama, bilangan hari bekerja adalah sifar.
  3. Sila ambil perhatian bahawa kaedah ini tidak mengambil kira cuti.

Rentetan angka yang disediakan dibina dengan membuat jadual tarikh mula dan tamat, bermula dengan hari Isnin, disusun dalam baris dan lajur. Jadual diisi secara menyerong dengan sifar, menunjukkan bahawa tiada hari bekerja antara jenis hari yang sama (contohnya, Isnin hingga Isnin).

Untuk setiap hari, bilangan hari bekerja dikira dengan bergerak secara menyerong di sepanjang baris ke kanan. Jika ditemui hari tidak bekerja (hujung minggu), bilangannya tidak berubah. Jika tidak, ia dinaikkan sebanyak 1. Selepas sampai ke penghujung baris, kaunter ditetapkan semula dan proses diteruskan sehingga pepenjuru dicapai semula.

Sebagai contoh, andaikan Sabtu dan Ahad adalah hari tidak bekerja:

M T W T F S S
M 0 1 2 3 4 4 4
T 4 0 1 2 3 3 3
W 3 4 0 1 2 2 2
T 2 3 4 0 1 1 1
F 1 2 3 4 0 0 0
S 0 1 2 3 4 0 0
S 0 1 2 3 4 4 0

Menggabungkan 49 nilai dalam jadual ini menghasilkan rentetan yang digunakan dalam ungkapan.

Penyelesaian ini tidak mengambil kira cuti, tetapi ia boleh mengira bilangan hari bekerja dengan cekap antara dua tarikh dalam MySQL.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengira Hari Perniagaan dengan Cekap Antara Dua Tarikh dalam MySQL Tanpa Menggunakan Jadual Percutian?. 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