この関数は date に週の数を戻します。WEEK() の、引数がふたつのフォームによって、週が日曜で始まるか、月曜で始まるか、また、戻り値の範囲は 0 から 53 か、1 から 53 かを指定することが可能です。mode 引数が省略された場合は、default_week_format システム環境変数の値が使用されます。詳細は 項4.2.3. 「システム変数」 を参照してください。
次のテーブルは、mode 引数がどのように作用するかを示したものです。
| 開始日 | |||
| モード | 曜日 | 範囲 | Week 1 は下記の最初の週… |
| 0 | 日曜日 | 0-53 | この年の日曜日 |
| 1 | 月曜日 | 0-53 | この年は 3 日以上 |
| 2 | 日曜日 | 1-53 | この年は日曜日 |
| 3 | 月曜日 | 1-53 | この年は 3 日以上 |
| 4 | 日曜日 | 0-53 | この年は 3 日以上 |
| 5 | 月曜日 | 0-53 | この年は月曜日 |
| 6 | 日曜日 | 1-53 | この年は 3 日以上 |
| 7 | 月曜日 | 1-53 | この年は月曜日 |
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
与えられた日付が 1999 年の 52 週目に発生するため、MySQL は WEEK() 関数に 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'