Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


WEEK

📄字数 1.2K
👁️阅读量 加载中...

功能描述

返回指定日期所在的周数。两个参数能够指定一周是从 星期日 还是 星期一 开始,以及返回值是在 [0, 53] 还是 [1, 53] 的范围内。

语法格式

sql
WEEK(date[, mode])

输入参数

  • dateDATETIME 类型,当参数为 TIME 类型时,其对应的日期为当前系统日期。
  • mode:用于确定周数计算的逻辑,INTEGER 类型,可选参数,缺省时,使用系统参数 WEEK_MODE 的值。

提示

  • NULL 无具体的类型,当第一个参数为 NULL 时,会产生异常 E10100 候选函数出现多义性,需要手动为参数指定具体的类型,如:WEEK(NULL::DATE)WEEK(NULL::DATE, NULL)

下表详细描述了mode的取值范围,以及工作机制:

mode一周的第一天周数范围第一周的定义标准
0Sunday0-53包含本年度第一个周日的周
1Monday0-53包含至少4天属于本年度的周(ISO 8601标准)
2Sunday1-53包含本年度第一个周日的周
3Monday1-53包含至少4天属于本年度的周(ISO 8601标准)
4Sunday0-53包含至少4天属于本年度的周
5Monday0-53包含本年度第一个周一的周
6Sunday1-53包含至少4天属于本年度的周
7Monday1-53包含本年度第一个周一的周

说明

  • 一周的第一天 表示一周的开始是 周日(Sunday) 还是 周一(Monday)
  • 周数范围 返回 0-531-53
    • 0-530 表示 从 1 月 1 日至第一周开始的天数,换句话说,这些日期落在前一年的最后一周,返回 0 可以更好地表示返回值是“给定年份的周数”;当然,如果想反应日期所属的真实的周数,可以指定mode为 251 表示第一周,以此类推。
    • 1-53从 1 月 1 日至第一周开始的天数被算作上一年的最后一周,使用上一年的最后一周的周数;1 表示第一周,以此类推。
  • 包含本年度第一个周日的周包含本年度第一个周一的周:只要这一周包含 1 月 1 日,就算作第一周,即使只有一天也算。
  • 包含至少4天属于本年度的周:包含 1 月 1 日 的周有至少 4 天属于新年,则该周为第一周,否则,该周是上一年的最后一周,下一周才是第一周。

以下是不同mode对应返回的结果,例如:

日期日期模式0模式1模式2模式3模式4模式5模式6模式7
2024-12-30星期一52535215353153
2024-12-31星期二52535215353153
2025-01-01星期三0152110153
2025-01-02星期四0152110153
2025-01-04星期六0152110153
2025-01-05星期日111120253
2025-01-06星期一12122121

输出结果

返回 TINYINT 类型,输入参数为 NULL 时,输出结果为 NULL

示例

sql
-- 返回 '2023-01-01' 在指定的mode下,是所在年份的第几周
SQL> SELECT WEEK('2023-01-01'), WEEK('2023-01-01', 3);

+-------+-------+
| EXPR1 | EXPR2 |
+-------+-------+
| 1     | 52    |
+-------+-------+