適用於報表、排程等需固定取「上週完整範圍」的場景。MySQL 預設週日為每週第一天 (mode 0),需調整。
DECLARE _LastWeekStartTime DATE; -- 上週一 DECLARE _LastWeekEndTime DATE; -- 上週日 -- 因系統以週日為週首,先減 1 天對齊 SET @A = DATE_ADD(CURDATE(), INTERVAL -1 DAY); -- 算出本週一 SET @B = SUBDATE(@A, DATE_FORMAT(@A, '%w') - 1); -- 上週日 = 本週一 - 2 天 SET @C = DATE_ADD(@B, INTERVAL -2 DAY); -- 上週一 = 上週日所在週的週一 SET _LastWeekStartTime = SUBDATE(@C, DATE_FORMAT(@C, '%w') - 1); -- 上週日 = 上週一 + 6 天 SET _LastWeekEndTime = DATE_ADD(_LastWeekStartTime, INTERVAL 6 DAY);
DATE_FORMAT(date, '%w') 返回 0(週日)~6(週六)。SUBDATE(CURDATE(), INTERVAL WEEKDAY(CURDATE())+7 DAY) 等。WHERE dt BETWEEN _LastWeekStartTime AND _LastWeekEndTime。