#WEEK
WEEK函数返回date指定日期所在日历周的周数。mode参数用于指定一周的第一天是周一或周日、返回值范围是0-53或1-53以及如何确定一年的第一周。
若不指定mode参数,默认使用DEFAULT_WEEK_FORMAT系统变量值,请查阅系统变量(mysql模式)。
mode参数取值及效果如下表:
| mode值 | 周的第一天 | 返回值 | 指定年的第一周的条件 |
|---|---|---|---|
| 0 | 周日 | 0-53 | 第一个包含周日的周 |
| 1 | 周一 | 0-53 | 第一个包含指定年内至少4天的周 |
| 2 | 周日 | 1-53 | 第一个包含周日的周 |
| 3 | 周一 | 1-53 | 第一个包含指定年内至少4天的周 |
| 4 | 周日 | 0-53 | 第一个包含指定年内至少4天的周 |
| 5 | 周一 | 0-53 | 第一个包含周一的周 |
| 6 | 周日 | 1-53 | 第一个包含指定年内至少4天的周 |
| 7 | 周一 | 1-53 | 第一个包含周一的周 |
当mode参数值为1、3、4、6时,周数符合ISO 8601:1988,即:
若1月1日所在的周在新的一年里存在至少4天,那么该周是第一周;
否则,该周是上一年的最后一周,该周的下一周是第一周。
当mode参数值为1、4、5、8时,WEEK函数的返回值总符合date参数指定的年份,即如果date指定的日期是前一年的最后一周,那么WEEK函数返回0而不是52。
示例(单机HEAP表)
SELECT WEEK('2025-1-1') res FROM DUAL;
res
-----------------
0
SELECT WEEK('2025-1-1', 2) res FROM DUAL;
res
-----------------
52

