WEEK() 週數

WEEK(date[,mode])
  • date 傳入的日期
  • mode 計算方式

該函數回傳 date 對應的週數。WEEK() 的雙參數形式允許你指定該週是否起始於週日或週一, 以及回傳值的範圍是否為從0 到53 或從1 到53。若 mode參數被省略,則使用default_week_format系統變數的值。
以下表說明了mode 參數的工作過程:
Mode 週的第一天 回傳值範圍 回傳值1 表示
0 Sunday 0-53 該年的第一週以Sunday開始
1 Monday 0-53 超過三天在該年
2 Sunday 1-53 該年的第一週以Sunday開始
3 Monday 1-53 超過三天在該年
4 Sunday 0-53 超過三天在該年
5 Monday 0-53 該年的第一週以Monday開始
6 Sunday 1-53 超過三天在該年
7 Monday 1-53 該年的第一週以Monday開始

mysql> SELECT WEEK('1998-02-20');
-> 7

mysql> SELECT WEEK('1998-02-20',0);
-> 7

mysql> SELECT WEEK('1998-02-20',1);
-> 8

mysql> SELECT WEEK('1998-12-31',1);
-> 53

注意,假如有一個日期位於前一年的最後一周,若你不使用2、3、6或7作為 mode 參數,則MySQL回傳 0:
mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
-> 2000, 0

有人或許會提出意見,認為 MySQL 對於WEEK() 函數應該回傳 52 ,原因是給定的日期實際上發生在1999年的第52周。我們決定回傳0作為代替的原因是我們希望該函數能回傳「給定年份的星期數」。這使得WEEK() 函數在同其它從日期中抽取日期部分的函數結合時的使用更加可靠。
假如你更希望所計算的關於年份的結果包括給定日期所在周的第一天,則應使用 0、2、5或 7 作為mode參數選擇。
mysql> SELECT WEEK('2000-01-01',2);
-> 52

作為選擇,可使用 YEARWEEK()函數:
mysql> SELECT YEARWEEK('2000-01-01');
-> 199952
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
-> '52'

沒有留言: