跳到主要内容

YEARWEEK

描述

YEARWEEK 函数用于返回指定日期对应的 “年份 + 周数” 组合(格式为 YYYYWW,如 202301 表示 2023 年第 1 周)。该函数通过可选参数 mode 灵活定义一周的起始日和 “第一周” 的判断标准,默认使用 mode=0。

周数范围为 1-53,具体取决于 mode 的配置。

参数 mode 的作用参见下面的表格:

Mode星期的第一天星期数的范围第一个星期的定义
0星期日1-53这一年中的第一个星期日所在的星期
1星期一1-53这一年的日期所占的天数大于等于 4 天的第一个星期
2星期日1-53这一年中的第一个星期日所在的星期
3星期一1-53这一年的日期所占的天数大于等于 4 天的第一个星期
4星期日1-53这一年的日期所占的天数大于等于 4 天的第一个星期
5星期一1-53这一年中的第一个星期一所在的星期
6星期日1-53这一年的日期所占的天数大于等于 4 天的第一个星期
7星期一1-53这一年中的第一个星期一所在的星期

该函数与 mysql 中的 yearweek 函数 行为一致

语法

YEARWEEK(<date_or_time_expr>[, mode])

返回值

返回 INT 类型的整数,格式为 YYYYWW(前 4 位为年份,后 2 位为周数),例如 202305 表示 2023 年第 5 周,202052 表示 2020 年第 52 周。

  • 若日期所在周属于上一年,返回上一年的年份和周数(如 2021 年 1 月 1 日可能返回 202052)。
  • 若日期所在周属于下一年,返回下一年的年份和第 1 周(如 2024 年 12 月 30 日可能返回 202501)。
  • 若输入为NULL,返回 NULL。

举例

-- 默认mode=0(星期日起始,第一周含第一个星期日)
-- 2021-01-01是星期五,所在周的第一个星期日为2020-12-27,故属于2020年第52周
SELECT YEARWEEK('2021-01-01') AS yearweek_mode0;
+----------------+
| yearweek_mode0 |
+----------------+
| 202052 |
+----------------+

-- mode=1(星期一起始,4天规则,与WEEKOFYEAR一致)
SELECT YEARWEEK('2020-07-01', 1) AS yearweek_mode1;
+----------------+
| yearweek_mode1 |
+----------------+
| 202027 |
+----------------+

-- mode=1,跨年周(2024-12-30是星期一,所在周2025年日期占比≥4天,属于2025年第1周)
SELECT YEARWEEK('2024-12-30', 1) AS cross_year_mode1;
+-------------------+
| cross_year_mode1 |
+-------------------+
| 202501 |
+-------------------+

-- mode=5(星期一起始,第一周含第一个星期一)
-- 2023-01-02是星期一(当年第一个星期一),所在周为2023年第1周
SELECT YEARWEEK('2023-01-02', 5) AS yearweek_mode5;
+----------------+
| yearweek_mode5 |
+----------------+
| 202301 |
+----------------+

-- 输入为DATE类型
SELECT YEARWEEK('2023-12-25', 1) AS date_type_mode1;
+-------------------+
| date_type_mode1 |
+-------------------+
| 202352 |
+-------------------+

-- 输入为NULL(返回NULL)
SELECT YEARWEEK(null);
+----------------+
| YEARWEEK(null) |
+----------------+
| NULL |
+----------------+