2012-08-03 13 views
31

MySQLのWEEK()関数のどのモードでISO 8601 week of the yearが得られますか? WEEK()の引数2は、このチャートに応じてモードを設定します。MySQL WEEK()がISO 8601準拠のモード

+--------------------------------------------------------------------+ 
| Mode | First day of week | Range | Week 1 is the first week ... | 
|------+-------------------+-------+---------------------------------| 
| 0 | Sunday   | 0-53 | with a Sunday in this year  | 
|------+-------------------+-------+---------------------------------| 
| 1 | Monday   | 0-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 2 | Sunday   | 1-53 | with a Sunday in this year  | 
|------+-------------------+-------+---------------------------------| 
| 3 | Monday   | 1-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 4 | Sunday   | 0-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 5 | Monday   | 0-53 | with a Monday in this year  | 
|------+-------------------+-------+---------------------------------| 
| 6 | Sunday   | 1-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 7 | Monday   | 1-53 | with a Monday in this year  | 
+--------------------------------------------------------------------+ 

ウィルこれらのモードの1年間の8601週ISOを与えますか?

+6

+1を3 SELECT YEARWEEKàラfonction YEARWEEK IL fautimpérativementajouterルモードを注ぐ(私は "MySQLの週ISO-8601" と、この質問のためにGoogleで検索しました – Hnatt

答えて

53

ISO週番号では、月曜日が曜日の最初の曜日であるため、それだけで奇数モードの1つに絞られます。

Per Wikipedia

週01の相互に同等の記述があります。

  • 週それで今年の最初の木曜日(正式なISOの定義)と、
  • 週4とはその中の1月、
  • 初年度の過半数(4日以上)の最初の週と、
  • は、12月29日〜1月4日の月曜日から始まる週です。

上記の表から「3日以上、今年で」これらの記述の一致の3分の1は、今、私たちは、まだからの最後のいずれか1または3

にそれを絞り込むましたウィキペディア(強調):

1月1日が月曜日、火曜日、水曜日、または木曜日の場合、それは01週目です。1月1日が金曜日、土曜日、または日曜日の場合、週52または前年の53日(今週はありません)

したがって、範囲は0〜53ではなく1〜53でなければなりません。これは、右モードがモード3であることを意味します。

+0

この回答が正しいことを確認するには、ISO 8601のセクション2.2.8と2.2.10の「カレンダーの週」と「カレンダーの週番号」の公式の定義を参照してください。なぜ週0がないのかを明確にするために、「カレンダー週番号」は「序数」として定義され、序数は1から始まります。 – TachyonVortex

+0

ありがとう! .... – Ken

15

私はこの質問が古いですけど、それもSEOが配置:) をだから、より完全な答えを作ることです - 年と週番号を表示するとき、あなたはこの使用することができます。

DATE_FORMAT(your_date_here, "%x-%v") 

それを"%v"(1〜53)のiso週番号と "%x"の正しい年番号が生成されます。

あなたは[mysqldを]§/etc/mysql/my.cnfファイルに入れてきたフランスのために
+2

ニース。それは報告するのに最適です!ありがとう! – Ross

0

: default_week_format = 3

お知らせ:YEARWEEKためいけない作業を、ニーズが= 3 SELECT YEARWEEK(CURDATE(モードを追加)、3)

ラフランスVOUSのdevez修飾OU ajouterのcetteのLIGNEはDANS注ぐルparagraphe [mysqldを]デュfichier /etc/mysql/my.cnf: default_week_format = 3 セラPermetのアラカルトfonction WEEKリターナールvraies numeros de semaines Fra nçaise。 注意(、)3 CURDATE()は、検索の利便性のため

+0

あなたの投稿を読むことに興味がありましたが、私はフランス語を読むことができません。 [スタックオーバーフローは英語を優先する](http://meta.stackexchange.com/questions/13676/is-english-required-on-stack-overflow) – steampowered

関連する問題