如果你想要过去 4 周的第一个星期一到今天的所有数据,你可以使用这个:
AND datatime >= DATE_ADD(
DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY),
INTERVAL - 4 WEEK)
但是,如果你想要从过去 4 周的第一个星期一到最后一个星期日的所有数据,你可以使用这个:
AND datatime >= DATE_ADD(
DATE_ADD(CURDATE(), INTERVAL - WEEKDAY(CURDATE()) DAY),
INTERVAL - 4 WEEK)
AND datatime < DATE_SUB(
DATE(NOW()), INTERVAL DAYOFWEEK(NOW())-2 DAY)
发生了什么 :
您可以在此处找到日期和时间函数。在此查询中,我们使用:
- DATE_ADD(start, Interval) :将时间值(间隔)添加到日期值(开始),
- DATE_SUB(end, Interval) :从日期(结束)中减去时间值(间隔),
- CURDATE() :返回当前日期,
- WEEKDAY(date) :返回日期的工作日索引(0 = 星期一,1 = 星期二,... 6 = 星期日),
- DAYOFWEEK(date) :返回日期的工作日索引(1 = 星期日,2 = 星期一,...,7 = 星期六)
所以 :
DATE_ADD(
DATE_ADD(----------------------------------------------------------
CURDATE(), |
INTERVAL - WEEKDAY(CURDATE()) DAY //<== Return Today Index |-> Will Return the date of this week's monday : (25-01-2018 - 3 DAY) = 22-01-2018
(WEEKDAY(25-01-2018) = 3)|
),-----------------------------------------------------------------
INTERVAL - 4 WEEK //<== Will go 4 weeks back and start from monday
)
一个工作案例场景。