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

Tính tuần trong tháng (week of month) trong MySQL

MySQL không có hàm tích sẵn để tính tuần trong tháng. Cần dùng công thức kết hợp WEEK(), DATE_SUB(), DAYOFMONTH().

Công thức

SELECT WEEK(cot_ngay, 5) - WEEK(DATE_SUB(cot_ngay, INTERVAL DAYOFMONTH(cot_ngay) - 1 DAY), 5) + 1 AS tuan_trong_thang
FROM ten_bang;

Giải thích:

  • WEEK(date, 5): Tuần trong năm, bắt đầu từ thứ Hai (mode 5)
  • DATE_SUB(date, INTERVAL DAYOFMONTH(date)-1 DAY): Tìm ngày đầu tiên của tháng
  • Hiệu của hai tuần + 1 = tuần trong tháng

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

mysql> CREATE TABLE FirstWeekOfMonth (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> yourdate DATE
    -> );

mysql> INSERT INTO FirstWeekOfMonth(yourdate) VALUES('2019-01-18');
mysql> INSERT INTO FirstWeekOfMonth(yourdate) VALUES('2019-04-19');
mysql> INSERT INTO FirstWeekOfMonth(yourdate) VALUES('2019-05-20');
mysql> INSERT INTO FirstWeekOfMonth(yourdate) VALUES('2019-12-31');
mysql> INSERT INTO FirstWeekOfMonth(yourdate) VALUES('2019-10-05');
mysql> INSERT INTO FirstWeekOfMonth(yourdate) VALUES('2019-08-25');

Tính tuần trong tháng:

mysql> SELECT WEEK(yourdate, 5) - 
    -> WEEK(DATE_SUB(yourdate, INTERVAL DAYOFMONTH(yourdate) - 1 DAY), 5) + 1 AS FirstWeekDemo
    -> FROM FirstWeekOfMonth;

Kết quả:

+---------------+
| FirstWeekDemo |
+---------------+
| 3             |
| 3             |
| 4             |
| 6             |
| 1             |
| 4             |
+---------------+

Ví dụ: 2019-01-18 rơi vào tuần thứ 3 của tháng 1/2019; 2019-10-05 rơi vào tuần thứ 1.