MySQL的WEEK()功能是什么模式产生一年中的ISO 8601周?参数2 WEEK()根据此图表设置模式:
+--------------------------------------------------------------------+
| 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周?
Mic*_*sen 67
在ISO周编号中,星期一是一周的第一天,因此仅将其缩小到奇数模式之一.
第01周有相互等同的描述:
- 今年第一个星期四的一周(正式的ISO定义),
- 1月4日的一周,
- 第一周,在起始年份的大部分时间(四次或更多次),以及
- 从12月29日至1月4日的周一开始的一周.
这些描述中的第三个与上表中的"今年超过3天"匹配,所以现在我们将其缩小到1或3.
最后,仍然来自维基百科(重点补充):
如果1月1日是星期一,星期二,星期三或星期四,则是01周.如果1月1日是星期五,星期六或星期日,则是上一年的第52周或第53周(没有第00周).
因此,范围必须是1-53,而不是0-53.这反过来意味着正确的模式是模式3.
小智 24
我知道这个问题已经过时了,但它的SEO位置很好:)所以只是为了让答案更加完整 - 当显示年份和周数时,你可以使用这个:
DATE_FORMAT(your_date_here, "%x-%v")
它将产生"%v"(1-53)的iso周数和"%x"的正确年份数.
ISO 8601的答案是模式3:
SELECT week(your_date_column, 3) FROM your_table
| 归档时间: | 
 | 
| 查看次数: | 12891 次 | 
| 最近记录: |