Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Fungsi MySQL untuk menemukan jumlah hari kerja antara dua tanggal

Ungkapan ini -

5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400012345001234550', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)

menghitung jumlah hari kerja antara tanggal mulai @S dan tanggal akhir @E.

Asumsikan tanggal akhir (@E) tidak sebelum tanggal mulai (@S).Kompatibel dengan DATEDIFF karena tanggal mulai dan tanggal akhir yang sama memberikan nol hari kerja.Mengabaikan hari libur.

String angka dibangun sebagai berikut. Buat tabel hari mulai dan hari akhir, baris harus dimulai dengan senin (HARI WEEK0) dan kolom harus dimulai dengan hari Senin juga. Isi diagonal dari kiri atas ke kanan bawah dengan semua 0 (yaitu ada 0 hari kerja antara Senin dan Senin, Selasa dan Selasa, dll.). Untuk setiap hari dimulai dari diagonal (harus selalu 0) dan isi kolom hingga benar, satu hari pada suatu waktu. Jika Anda mendarat di kolom hari akhir pekan (non hari kerja), jumlah hari kerja tidak berubah, itu dibawa dari kiri. Jika tidak, jumlah hari kerja bertambah satu. Ketika Anda mencapai akhir baris, ulangi kembali ke awal baris yang sama dan lanjutkan hingga Anda mencapai diagonal lagi. Kemudian lanjutkan ke baris berikutnya.

Misalnya. Dengan asumsi hari Sabtu dan Minggu bukan hari kerja -

 | 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| 1 2 3 4 5 0 0
S| 1 2 3 4 5 5 0

Kemudian gabungkan 49 nilai dalam tabel ke dalam string.

Beri tahu saya jika Anda menemukan bug.

-Tabel yang disempurnakan:

 | 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

string yang ditingkatkan:'012344440123333401222340111123400001234000123440'

ekspresi yang ditingkatkan:

5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Solusi DBaaS Terbaik untuk MySQL

  2. Load Balancing Sadar Basis Data:Cara Bermigrasi dari HAProxy ke ProxySQL

  3. Hibernate 5:- org.hibernate.MappingException:Entitas tidak dikenal

  4. 5 Cara untuk Memeriksa Apakah Tabel Ada di MySQL

  5. Panduan Merancang Basis Data Untuk Acara Kalender Dan Pengingat Di MySQL