一尘不染

MySQL WEEK()的哪种模式符合ISO 8601

mysql

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      |
+--------------------------------------------------------------------+

这些模式中的一种会提供一年中的ISO 8601吗?


阅读 358

收藏
2020-05-17

共1个答案

一尘不染

在ISO周编号中,星期一是一周的第一天,因此仅凭它就可以将其范围缩小为奇数模式之一。

根据维基百科

第01周的描述相互等效:

  • 一年中第一个星期四的星期(正式的ISO定义),
  • 1月4日这一周,
  • 起始年份中大部分(四天或以上)的第一周,以及
  • 从12月29日至1月4日的星期一开始的一周。

这些描述中的第三个与上表中的“今年超过3天”匹配,因此现在我们将其范围缩小到1或3。

最后,仍然来自Wikipedia(强调):

如果1月1日在星期一,星期二,星期三或星期四,则在第01周。如果1月1日在星期五,星期六或星期日,则在前一年的第52或53周 (没有第00周)

因此,范围必须为1到53,而不是0到53。这又意味着正确的模式是 模式3

2020-05-17