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