web-dev-qa-db-ja.com

MySQL WEEK()のどのモードがISO 8601に準拠していますか

MySQLの WEEK() 関数のどのモードが ISO 8601年間の週 を生成しますか? WEEK()の引数2は、このチャートに従ってモードを設定します。

+--------------------------------------------------------------------+
| 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つは、ISO 8601の週を与えますか?

44
steampowered

ISO週番号付けでは、月曜日が週の最初の日なので、それだけで奇数番号モードのいずれかに絞り込みます。

Wikipediaごと

01週の相互に同等の説明があります。

  • 年の最初の木曜日が含まれる週(正式なISO定義)、
  • 1月4日の週
  • 初年度の日数の過半数(4日以上)を含む最初の週、および
  • 12月29日から1月4日までの月曜日から始まる週。

これらの説明の3番目は、上の表の「今年は3日以上」と一致するため、1または3に絞り込みました。

最後に、まだウィキペディアから(強調を追加):

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

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

68
Michael Madsen

私はこの質問が古いことを知っていますが、それはSEOの位置付けが適切です:)答えをより完全にするために-年と週の番号を表示する場合、これを使用できます:

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

"%v"(1-53)の等週番号と "%x"の正しい年番号を生成します。

26
Bulba

フランスの場合、ファイル/etc/mysql/my.cnf§[Mysqld]に次のように入力する必要があります:default_week_format = 3

注意:YEARWEEKでは機能しません。追加モードが必要です= 3 SELECT YEARWEEK(CURDATE()、3)

Pour la France vous devez modifier ou ajouter cette ligne dans le paragraphe [Mysqld] du fichier /etc/mysql/my.cnf:default_week_format = Cela permetàla fonction [〜#〜 ]週[〜#〜] de retourner les vraiesnumérosde semainesFrançaise。 YEARWEEK il fautimpérativementajouter le modeà3 SELECT YEARWEEK(CURDATE()、3)に注意してください。

0
Vince