Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hàm MySQL để tìm số ngày làm việc giữa hai ngày

Biểu thức này -

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

tính toán số ngày làm việc từ ngày bắt đầu @S đến ngày kết thúc @E.

Giả sử ngày kết thúc (@E) không trước ngày bắt đầu (@S). Tương thích với DATEDIFF ở chỗ cùng một ngày bắt đầu và ngày kết thúc không có ngày làm việc nào. Bỏ qua ngày nghỉ.

Chuỗi các chữ số được xây dựng như sau. Tạo bảng ngày bắt đầu và ngày kết thúc, các hàng phải bắt đầu bằng thứ hai (WEEKDAY0) và các cột cũng phải bắt đầu bằng thứ hai. Điền vào hình lục giác từ trên cùng bên trái đến dưới cùng bên phải với tất cả 0 (tức là có 0 ngày làm việc từ Thứ Hai đến Thứ Hai, Thứ Ba và Thứ Ba, v.v.). Đối với mỗi ngày, hãy bắt đầu ở đường chéo (phải luôn là 0) và điền vào các cột đúng, một ngày tại một thời điểm. Nếu bạn hạ cánh vào cột ngày cuối tuần (ngày không phải làm việc), số ngày làm việc không thay đổi, nó được chuyển từ bên trái. Nếu không, số ngày làm việc sẽ tăng lên một. Khi bạn đến cuối vòng lặp, quay trở lại đầu của cùng một hàng và tiếp tục cho đến khi bạn vẽ lại đường chéo. Sau đó chuyển sang hàng tiếp theo.

Ví dụ. Giả sử Thứ Bảy và Chủ Nhật không phải là ngày làm việc -

 | 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

Sau đó, nối 49 giá trị trong bảng vào chuỗi.

Vui lòng cho tôi biết nếu bạn tìm thấy bất kỳ lỗi nào.

-Bảng cải tiến:

 | 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

chuỗi cải tiến:'0123444401233334012222340111123400001234000123440'

cải thiện biểu hiện:

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. Hiệu suất MySQL:MyISAM so với InnoDB

  2. MySQL và NoSQL:Giúp tôi chọn đúng

  3. ÁP DỤNG CROSS / OUTER trong MySQL

  4. Cách bảo mật MySQL:Phần thứ hai

  5. MySQL Chọn Ngày tương đương với Hôm nay