我有一个查询,它会返回一个月的一周,但我想要日期范围。如何更改查询以获取本周的日期范围。这是我的查询:
select
date,
FLOOR((DAYOFMONTH(date) - 1) / 7) + 1 AS week,
Concat('Week ',FLOOR((DAYOFMONTH(date) - 1) / 7) + 1) AS weekname
from table_test
where DATE_FORMAT(date,'%m/%Y')='".$monYear."'"
group by week
此处变量$ monYear等于“10/2017”。
本周从星期日到星期六开始,本月的第一周从01开始 所以,输出应该是这样的:
第1周:01/10/2107 - 07/10/2017
第2周:08/10/2017 - 14/10/2017
第3周:15/10/2017 - 21/10/2017
第4周:22/10/2017 - 28/10/2017
第5周:29/10/2017 - 2017年10月31日
好的,所以我试过这个,它几乎是正确的,但它给了我错误的结果'09 / 2017'。它给了我20170896作为第1周的startDay(96错了),它也没有给我两者之间的斜线。
select date-dayofweek(date)+1 as startDay,
date+ 7 - dayofweek(date) as endDate,
FLOOR((DAYOFMONTH(date) - 1) / 7) + 1 AS week,
from table_test where DATE_FORMAT(date,'%m/%Y')='09/2017' group by week
答案 0 :(得分:2)
我确定有人可以提供一些可能更多的东西',但这在我的测试中有效:
SELECT
date,
week,
weekname,
DATE_ADD(firstOfMonth,INTERVAL (week-1) WEEK) as 'Week Start',
IF(DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY) > eom,
eom,
DATE_ADD(firstOfMonth,INTERVAL ((week-1)*7+6) DAY)) as 'Week End'
FROM (
SELECT
date,
FLOOR((DAYOFMONTH(date) - 1) / 7 +1) AS week,
CONCAT('Week ',FLOOR((DAYOFMONTH(date) - 1) / 7) +1) AS weekname,
DATE_ADD(date,interval -DAY(date)+1 DAY) AS firstOfMonth,
LAST_DAY(date) as 'eom'
FROM table_test
WHERE DATE_FORMAT(date,'%m/%Y')='06/2017'
GROUP BY week
) a
(注意:在你的例子中你有6天31天,当时只有30天,但上面的其他内容与我的预期输出相符)
+-----------+------+----------+------------+------------+
| date | week | weekname | Week Start | Week End |
+-----------+------+----------+------------+------------+
| 2017-06-06| 1 | Week 1 | 2017-06-01 | 2017-06-07 |
| 2017-06-12| 2 | Week 2 | 2017-06-08 | 2017-06-14 |
| 2017-06-17| 3 | Week 3 | 2017-06-15 | 2017-06-21 |
| 2017-06-22| 4 | Week 4 | 2017-06-22 | 2017-06-28 |
| 2017-06-29| 5 | Week 5 | 2017-06-29 | 2017-06-30 |
+-----------+------+----------+------------+------------+
答案 1 :(得分:0)
dayofweek()函数返回一周内的日期位置,星期日为1。
yourdate-dayofweek(yourdate)+1
将为您提供一周中第一天的日期(假设您的一周中的第一天是星期日)。
yourdate + 7 - dayofweek(yourdate)
将返回一周中最后一天的日期(假设您的一周的第一天是星期日)。
如果你想让星期一作为第一天,那么使用weekday()函数将星期一的索引作为0返回。
在这种情况下, yourdate-weekday(yourdate)
将为您提供一周中第一天的日期。
yourdate + 6 - weekday(yourdate)
将返回一周中最后一天的日期。