Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tính lương dựa trên chênh lệch ngày vào làm và ngày nghỉ trong MySQL

Sử dụng DATEDIFF(end_date, start_date) tính số ngày, nhân với lương ngày (Value) để ra tổng lương. Dùng ABS() đảm bảo dương.

Tạo bảng chấm công

mysql> CREATE TABLE DemoTable (
    -> JoinDate DATE,
    -> EndDate DATE,
    -> Value INT
    -> );
Query OK, 0 rows affected (1.16 sec)
mysql> INSERT INTO DemoTable VALUES('2019-01-01', '2019-01-31', 500), ('2019-02-12', '2019-02-25', 900);
Query OK, 2 rows affected (0.37 sec)

Truy vấn tính lương

mysql> SELECT ABS(DATEDIFF(JoinDate, EndDate) * Value) AS Total FROM DemoTable;

Kết quả:

+-------+
| Total |
+-------+
| 15000 |
| 11700 |
+-------+
2 rows in set (0.14 sec)

Giải thích:

  • Hàng 1: 30 ngày * 500 = 15,000
  • Hàng 2: 13 ngày * 900 = 11,700
  • DATEDIFF trả về số ngày (có thể âm nếu end < start)
  • ABS() lấy giá trị tuyệt đối

Cải tiến: Thêm cột DailyWage, tính DATEDIFF(EndDate, JoinDate) + 1 nếu tính cả ngày đầu và cuối.