MySQL @Wiki 実用リファレンス
WEEK
最終更新:
Bot(ページ名リンク)
-
view
WEEK
WEEK(date [,mode])
date に指定された日付に対応する週数を返す。 引数を 2 つ取る形式の WEEK() では、週を日曜と月曜のどちらから開始するかと、戻り値の範囲を 0 〜 53 と 1 〜 52 のどちらにするかを指定できる。mode 引数を省略した場合は、default_week_format サーバ変数の値(または MySQL 4.0 以前のバージョンでは 0)が適用される。
次の表に、mode 引数の動作を示す。
次の表に、mode 引数の動作を示す。
| 値 | 意味 |
| 0 | 日曜から週を開始。戻り値の範囲は 0 〜 53。週 1 はその年に開始される最初の週。 |
| 1 | 月曜から週を開始。戻り値の範囲は 0 〜 53。週 1 は 4 日以上の日を持つその年の最初の週。 |
| 2 | 日曜から週を開始。戻り値の範囲は 1 〜 53。週 1 はその年に開始される最初の週。 |
| 3 | 月曜から週を開始。戻り値の範囲は 1 〜 53。週 1 は 4 日以上の日を持つその年の最初の週。 |
| 4 | 日曜から週を開始。戻り値の範囲は 0 〜 53。週 1 は 4 日以上の日を持つその年の最初の週。 |
| 5 | 月曜から週を開始。戻り値の範囲は 0 〜 53。週 1 はその年に開始される最初の週。 |
| 6 | 日曜から週を開始。戻り値の範囲は 1 〜 53。週 1 は 4 日以上の日を持つその年の最初の週。 |
| 7 | 月曜から週を開始。戻り値の範囲は 1 〜 53。週 1 はその年に開始される最初の週。 |
mode 値 3 は MySQL 4.0.5 以降で使用できる。 mode 値 4 以上は MySQL 4.0.17 以降で使用できる。
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
注意:バージョン 4.0 で、WEEK(date,0) は米国のカレンダに合わせて変更された。それ以前のバージョンでは、WEEK() の計算は米国の日付に対して正しく行われなかった(事実上、すべての場合で、WEEK(date) と WEEK(date,0) で結果が誤っていた)。
注意: 指定された日付が前年の最後の週にあたる場合、オプションの mode 引数として 2、3、6、7 のいずれかが指定されていないと、MySQL から値 0 が返る。
注意: 指定された日付が前年の最後の週にあたる場合、オプションの mode 引数として 2、3、6、7 のいずれかが指定されていないと、MySQL から値 0 が返る。
mysql> SELECT [[YEAR]]('2000-01-01'), WEEK('2000-01-01',0);
-> 2000, 0
この場合、指定された日付は実際には 1999 年の 52 週目に含まれるため、WEEK() 関数の結果として値 52 を返すべきだとする考え方もあるが、MySQL ではそのようにはせず、値 0 を返すようにした。これは、この関数によって、あくまでも ``指定された年の週数'' が返されるようにするためである。そうすることで、日付から日付部分を取り出す他の関数と組み合わせて WEEK() 関数を使用した場合の信頼性が確保される。
結果の評価を、指定した日付の週の最初の日が含まれる年に関連して行うには、オプションの mode 引数として 2、3、6、7 のいずれかを指定するようにする。
結果の評価を、指定した日付の週の最初の日が含まれる年に関連して行うには、オプションの mode 引数として 2、3、6、7 のいずれかを指定するようにする。
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'