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.