如何在MYSQL中获取该月的一周以及日期范围

时间:2017-10-06 12:15:31

标签: mysql

我有一个查询,它会返回一个月的一周,但我想要日期范围。如何更改查询以获取本周的日期范围。这是我的查询:

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

2 个答案:

答案 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)将返回一周中最后一天的日期。