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
DATEDIFFtrả 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.