2017-10-06 43 views
0

我有查詢返回我一個月的一週,但我想要的日期範圍與此。如何更改我的查詢以獲取本週的日期範圍。這是我的查詢:如何獲取月份的星期以及日期範圍在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

周:2107年1月10日 - 7月10日/ 2017

第2周:2017年8月10日 - 14/10/2017

第3周:15/10/2017 - 21/10/2017

第4周:22/10/2017 - 28/10/2017

5周:29/10/2017 - 31/10/2017

好了,所以我想這一點,對'09/2017' 年的幾乎正確的,但它給了我錯誤的結果。它給我20170896作爲第一週的開始日期(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 
+1

請[編輯]你的問題來定義該月的*周*根據您的業務規則,請運行星期日至星期六週,或週一至星期日?包含每個月的第一天的一週是否被認爲是該月的第一週? –

+0

仍在掙扎,請參閱:[爲什麼我應該提供一個用於我認爲是非常簡單的SQL查詢的MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-一個-mcve爲什麼似乎對我來說是一個非常簡單的SQL查詢) – Strawberry

回答

1

我敢肯定有人可以提供一些可能還會多一點「華而不實」,但這部作品在我的測試:

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 | 
+-----------+------+----------+------------+------------+ 
+0

你有一週的開始和結束日期之間有2周的差異... – Shadow

+0

是的,它幾乎是正確的,但'第一週'的週末是錯誤的,也沒有'第3周' –

+0

你測試了嗎?這可能是我的樣本數據並粘貼錯誤 –

0

dayofweek()函數返回當天的位置在一個星期內,以星期日爲1

yourdate-dayofweek(yourdate)+1會給你一週的第一天的日期(假設你在一週的第一天星期日)。

yourdate + 7 - dayofweek(yourdate)將返回一週中最後一天的日期(假設您的第一天是星期日)。

如果你想有星期一作爲第一天,然後用weekday()函數,返回當天與週一該指數爲0

yourdate-weekday(yourdate)會給你一週的第一天的日期這個案例。

yourdate + 6 - weekday(yourdate)將返回一週中最後一天的日期。

+0

但我主要的事情是日期range.ie第1周從0109/2017開始,於2017年9月8日結束,等等...... –

+0

第一天和最後一天都會給你。 – Shadow

+0

我想在我的查詢中添加dayofweek(),但我似乎無法得到它的工作。你可以在我的查詢中添加這個並顯示我嗎? –

相關問題