WEEK(date[,mode])

WEEK(date[,mode])

この関数は 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

日付が先年の最後の週に該当する場合、236 、または 7 をオプションの mode 引数として使用しなければ、MySQL は 0 を戻すので注意してください :

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
        -> 2000, 0

与えられた日付が 1999 年の 52 週目に発生するため、MySQL は WEEK() 関数に 52 を戻すべきだという意見もあります。しかし当社では、関数が 「与えらた年の週の」 を戻すべきだと考え、0 を戻しています。これにより、日付から日にち部分を摘出する他の関数と併用する際に、WEEK() 関数をより信頼して使用できるようになっています。

結果において、与えられた日付の週の最初の日を含む年の評価をしたい場合は、025 、または 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'