2015-04-21 51 views
0

我需要獲取給定日期的一週的開始日期和結束日期。 我需要給定日期的一週在星期一開始。MySQL WEEK(date [,mode]);工作還是我在這裏做錯了什麼?

如果我用out模式選項運行此查詢。

SELECT EXTRACT(YEAR FROM '2015-01-20') YEAR, 
     WEEK('2015-01-20') WK_No , 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Monday'), '%X%V %W') Mon, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Tuesday'), '%X%V %W') Tues, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Wednesday'), '%X%V %W') Wed, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Thursday'), '%X%V %W') Thur, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Friday'), '%X%V %W') Fri, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Saturday'), '%X%V %W') Sat, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20'), 'Sunday'), '%X%V %W') Sun; 

我得到以下結果

YEAR WK_No Mon   Tues  Wed   Thur  Fri   Sat   Sun 
2015 3  2015-01-19 2015-01-20 2015-01-21 2015-01-22 2015-01-23 2015-01-24 2015-01-18 

這一週在Sun 18

開始根據MySQL的幫助 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

如果我將模式設置爲1,3 ,我本週5,7應該在星期一開始,但沒有一個做 如果我使用模式1或3,例如模式1

SELECT EXTRACT(YEAR FROM '2015-01-20') YEAR, 
     WEEK('2015-01-20',1) WK_No , 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Monday'), '%X%V %W') Mon, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Tuesday'), '%X%V %W') Tues, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Wednesday'), '%X%V %W') Wed, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Thursday'), '%X%V %W') Thur, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Friday'), '%X%V %W') Fri, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Saturday'), '%X%V %W') Sat, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Sunday'), '%X%V %W') Sun; 

我的結果是錯的只是沒有真正

YEAR WK_No Mon   Tues  Wed   Thur  Fri   Sat   Sun 
2015 4  2015-01-26 2015-01-27 2015-01-28 2015-01-29 2015-01-30 2015-01-31 2015-01-25 

我得到不包括日期和星期還有一週上週日

開始。如果我使用模式5或7例如模式5

SELECT EXTRACT(YEAR FROM '2015-01-20') YEAR, 
     WEEK('2015-01-20',5) WK_No , 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Monday'), '%X%V %W') Mon, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Tuesday'), '%X%V %W') Tues, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Wednesday'), '%X%V %W') Wed, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Thursday'), '%X%V %W') Thur, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Friday'), '%X%V %W') Fri, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Saturday'), '%X%V %W') Sat, 
     STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',5), 'Sunday'), '%X%V %W') Sun; 

我得到與未使用模式選項相同的結果。

YEAR WK_No Mon   Tues  Wed   Thur  Fri   Sat   Sun 
2015 3  2015-01-19 2015-01-20 2015-01-21 2015-01-22 2015-01-23 2015-01-24 2015-01-18 

如何獲取給定日期的一週的開始日期和結束日期。 與給定日期的星期一開始?

回答

0

如果我理解正確的話,你要分別找到周,週一和週日的開始和結束的一天,爲你提供作爲輸入的日期..

這可以做,而比你容易得多正嘗試使用DATE_ADD和SUBDATE函數來執行此操作。

有關這些功能的更多信息,看看the documentation.

有了這些疑問,你可以做一個函數來處理這個要求。 DATE()可能會工作,而不是演員,我會在家時看看它。

周的下週日:

SELECT CAST('2015-04-22' + INTERVAL (6-WEEKDAY('2015-04-22')) day AS DATE);

啓動周:

SELECT CAST(SUBDATE('2015-04-26', WEEKDAY('2015-04-26')) AS DATE);

編輯:有點太迅速作出反應,編輯查詢,本週結束時可能會有些過於複雜,我會在回家時看看它。

0

只是爲了回答爲什麼原始查詢是錯誤的:您使用STR_TO_DATE%X%V %W作爲使用所提供的週數將字符串轉換爲正確的日期格式掩碼。但是,這個功能也需要知道你的「周開始」。

根據DATE_FORMAT docs有以下選項:

%V Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X 
%v Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x 

因此,你應該使用例如STR_TO_DATE(CONCAT(EXTRACT(YEAR FROM '2015-01-20'), WEEK('2015-01-20',1), 'Monday'), '%x%v %W') Mon讓週一的一週的開始。

相關問題