WEEK
📄字数 1.2K
👁️阅读量 加载中...
功能描述
返回指定日期所在的周数。两个参数能够指定一周是从 星期日
还是 星期一
开始,以及返回值是在 [0, 53]
还是 [1, 53]
的范围内。
语法格式
sql
WEEK(date[, mode])
输入参数
date
:DATE
或TIME
类型,当参数为TIME
类型时,其对应的日期为当前系统日期。mode
:用于确定周数计算的逻辑,INTEGER
类型,可选参数,缺省时,使用系统参数 WEEK_MODE 的值。
提示
- 因
NULL
无具体的类型,当第一个参数为NULL
时,会产生异常E10100 候选函数出现多义性
,需要手动为参数指定具体的类型,如:WEEK(NULL::DATE)
或WEEK(NULL::DATE, NULL)
。
下表详细描述了mode的取值范围,以及工作机制:
mode | 一周的第一天 | 周数范围 | 第一周的定义标准 |
---|---|---|---|
0 | Sunday | 0-53 | 包含本年度第一个周日的周 |
1 | Monday | 0-53 | 包含至少4天属于本年度的周(ISO 8601标准) |
2 | Sunday | 1-53 | 包含本年度第一个周日的周 |
3 | Monday | 1-53 | 包含至少4天属于本年度的周(ISO 8601标准) |
4 | Sunday | 0-53 | 包含至少4天属于本年度的周 |
5 | Monday | 0-53 | 包含本年度第一个周一的周 |
6 | Sunday | 1-53 | 包含至少4天属于本年度的周 |
7 | Monday | 1-53 | 包含本年度第一个周一的周 |
说明
一周的第一天
表示一周的开始是周日(Sunday)
还是周一(Monday)
。周数范围
返回0-53
或1-53
。0-53
:0
表示从 1 月 1 日至第一周开始的天数
,换句话说,这些日期落在前一年的最后一周,返回0
可以更好地表示返回值是“给定年份的周数”;当然,如果想反应日期所属的真实的周数,可以指定mode为2
或5
;1
表示第一周,以此类推。1-53
:从 1 月 1 日至第一周开始的天数被算作上一年的最后一周
,使用上一年的最后一周的周数;1
表示第一周,以此类推。
包含本年度第一个周日的周
或包含本年度第一个周一的周
:只要这一周包含1 月 1 日
,就算作第一周,即使只有一天也算。包含至少4天属于本年度的周
:包含1 月 1 日
的周有至少4
天属于新年,则该周为第一周,否则,该周是上一年的最后一周,下一周才是第一周。
以下是不同mode对应返回的结果,例如:
日期 | 日期 | 模式0 | 模式1 | 模式2 | 模式3 | 模式4 | 模式5 | 模式6 | 模式7 |
---|---|---|---|---|---|---|---|---|---|
2024-12-30 | 星期一 | 52 | 53 | 52 | 1 | 53 | 53 | 1 | 53 |
2024-12-31 | 星期二 | 52 | 53 | 52 | 1 | 53 | 53 | 1 | 53 |
2025-01-01 | 星期三 | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 |
2025-01-02 | 星期四 | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 |
2025-01-04 | 星期六 | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 |
2025-01-05 | 星期日 | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 |
2025-01-06 | 星期一 | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 |
输出结果
返回 TINYINT
类型,输入参数为 NULL
时,输出结果为 NULL
。
示例
sql
-- 返回 '2023-01-01' 在指定的mode下,是所在年份的第几周
SQL> SELECT WEEK('2023-01-01'), WEEK('2023-01-01', 3);
+-------+-------+
| EXPR1 | EXPR2 |
+-------+-------+
| 1 | 52 |
+-------+-------+