跳到主要内容

WEEK

描述

WEEK 函数用于返回指定日期对应的星期数,默认 Mode 为 0,支持通过 mode 参数自定义星期计算规则(如星期的第一天是周日还是周一、星期数的范围、第一个星期的判定标准等)。 参数 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 |这一年中的第一个星期一所在的星期 |

该函数与 mysql 中的 week函数 行为一致。

语法

WEEK(`<date_or_time_expr>`)
WEEK(`<date_or_time_expr>`,`<mode>`)

参数

参数描述
<datetime_or_date>输入的日期时间值,支持输入 date/datetime 类型,具体 datetime 和 date 格式请查看 datetime 的转换date 的转换
mode指定的一年第一周规则计算方法,为 INT 类型,范围为 0-7

返回值

返回类型为 INT,表示指定日期对应的星期数,具体范围由 <mode> 决定(0-53 或 1-53)。

  • <mode> 为非 0-7 的整数,则以 Mode 7 进行计算;
  • 若任一参数为 NULL,返回 NULL;
  • 跨年日期可能返回上一年的最后一周(如 2023 年 1 月 1 日在部分模式下属于 2022 年第 52 周)。

举例


-- 2020-01-01是星期三,当年第一个周日是2020-01-05,故属于第0周
SELECT WEEK('2020-01-01') AS week_result;
+-------------+
| week_result |
+-------------+
| 0 |
+-------------+

-- 2020-07-01是星期三,所在周包含≥4天属于2020年,为第27周
SELECT WEEK('2020-07-01', 1) AS week_result;
+-------------+
| week_result |
+-------------+
| 27 |
+-------------+

-- 对比mode=0和mode=3(不同规则的差异)
SELECT
WEEK('2023-01-01', 0) AS mode_0,
WEEK('2023-01-01', 3) AS mode_3;
+--------+--------+
| mode_0 | mode_3 |
+--------+--------+
| 1 | 52 |
+--------+--------+

-- 2023年第一个周一是1月2日,故2023-01-01属于2022年第52周
SELECT WEEK('2023-01-01', 7) AS week_result;
+-------------+
| week_result |
+-------------+
| 52 |
+-------------+

---输入范围不是 0-7 的整数,以 mode 7 进行处理
SELECT WEEK('2023-01-01', -1) AS week_result;
+-------------+
| week_result |
+-------------+
| 52 |
+-------------+

-- 输入为DATETIME类型(忽略时间部分)
SELECT WEEK('2023-12-31 23:59:59', 3) AS week_result;
+-------------+
| week_result |
+-------------+
| 52 |
+-------------+

---任意参数为 NULL ,结果返回 NULL
SELECT WEEK('2023-12-31 23:59:59', NULL),WEEK(NULL,3);
+-----------------------------------+--------------+
| WEEK('2023-12-31 23:59:59', NULL) | WEEK(NULL,3) |
+-----------------------------------+--------------+
| NULL | NULL |
+-----------------------------------+--------------+