MariaDB YEARWEEK() 函数的基础用法与实例

MariaDB YEARWEEK() 函数用来获取一个日期对应的年份和周数值,以格式 YYYYWW 的形式返回。

发布于

MariaDB YEARWEEK() 函数用来获取一个日期对应的年份和周数值,以格式 YYYYWW 的形式返回。它通常用于需要按照年份和周数对数据进行分组或排序的场景。

语法

MairaDB YEARWEEK() 函数的语法如下:

YEARWEEK(date, mode)
  • date: 要获取年份周数值的日期,可以是 DATE、DATETIME 或 TIMESTAMP 类型。
  • mode: 一个可选参数,用于指定计算周数时一周的开始日期(周日或周一)以及如何处理跨年的周数。取值范围为 0 到 7,默认值为 0。

不同的 mode 值的含义与 WEEK() 函数相同,具体如下:

Mode 值 一周的开始日期 年中第一周的定义
0 周日 最小包含该年第一个星期四的周
1 周一 最小包含该年 1 月 1 号的周
2 周日 最小包含该年第一个星期日的周
3 周一 最小包含该年第一个星期一的周
4 周日 最小包含该年 1 月 1 号的周(与 1 效果相同)
5 周一 最小包含该年最后一个星期四的周(与 3 相似)
6 周日 最小包含该年第一个星期二的周
7 周一 最小包含该年第一个星期日的周(与 0 相同)

函数返回值是一个介于 200001299953 之间的整数,前四位数字表示年份,后两位数字表示该年的周数。

实例

获取指定日期的年份周数值

本实例展示如何使用 YEARWEEK() 函数获取指定日期的年份周数值。

SELECT YEARWEEK('2023-05-15') AS yearweek;

以下是该语句的输出:

+----------+
| yearweek |
+----------+
|   202320 |
+----------+

输出结果显示 2023-05-15 这个日期对应的年份周数值为 202320,表示该日期是 2023 年的第 20 周。

使用不同的 mode 获取年份周数值

本实例展示使用不同的 mode 参数如何影响年份周数值的计算。

SELECT
    YEARWEEK('2023-01-01', 0) AS 'mode=0',
    YEARWEEK('2023-01-01', 1) AS 'mode=1',
    YEARWEEK('2023-01-01', 3) AS 'mode=3';

以下是该语句的输出:

+--------+--------+--------+
| mode=0 | mode=1 | mode=3 |
+--------+--------+--------+
| 202301 | 202252 | 202252 |
+--------+--------+--------+

对于同一个日期 2023-01-01,使用不同的 mode 值会导致年份周数值的不同计算方式:

  • mode=0 时的结果为 202301,表示这一天属于 2023 年的第 1 周
  • mode=1 时的结果为 202252,表示这一天属于 2022 年的最后一周
  • mode=3 时的结果也为 202252,表示这一天属于 2022 年的最后一周

按年份周数值分组统计

本实例展示如何使用 YEARWEEK() 函数按年份周数值对记录进行分组统计。

DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    created_at DATETIME
);

INSERT INTO orders (created_at) VALUES
    ('2023-05-01 10:00:00'),
    ('2023-05-03 14:30:00'),
    ('2023-05-08 09:15:00'),
    ('2023-05-15 16:45:00'),
    ('2023-05-22 11:20:00');

SELECT YEARWEEK(created_at) AS yearweek, COUNT(*) AS 订单数
FROM orders
GROUP BY YEARWEEK(created_at)
ORDER BY yearweek;

以下是该语句的输出:

+----------+--------+
| yearweek | 订单数 |
+----------+--------+
|   202318 |      2 |
|   202319 |      1 |
|   202320 |      1 |
|   202321 |      1 |
+----------+--------+

通过对 orders 表中的 created_at 字段应用 YEARWEEK() 函数并按年份周数值进行分组统计,可以方便地获取每一周的订单数量。结果显示第 18 周有 2 个订单,第 19、20、21 周各有 1 个订单。

转换年份周数值为日期格式

本实例展示如何将年份周数值转换为日期格式。

SELECT
    YEARWEEK('2023-05-15') AS yearweek,
    DATE_FORMAT(DATE_ADD('2023-01-01', INTERVAL YEARWEEK('2023-05-15') - 202301 WEEK), '%Y-%m-%d') AS dt;

以下是该语句的输出:

+----------+------------+
| yearweek | dt         |
+----------+------------+
|   202320 | 2023-05-14 |
+----------+------------+

这个示例中首先使用 YEARWEEK() 函数获取日期 2023-05-14 对应的年份周数值 202320。然后利用 DATE_ADD() 函数从 2023-01-01 开始,根据年份周数值与 202301 (2023 年第 1 周)的差值计算出相差的周数,并将其转换为日期格式。

通过这种方式,可以方便地将年份周数值转换回对应的日期格式。

相关函数

以下是几个与 MairaDB YEARWEEK() 相关的几个函数:

  • MariaDB WEEK() 函数用来获取指定日期是当年的第几周。
  • MariaDB YEAR() 函数用来获取指定日期的年份值。
  • MariaDB MONTH() 函数用来获取指定日期的月份值。
  • MariaDB DAYOFYEAR() 函数用来获取指定日期是一年中的第几天。
  • MariaDB WEEKDAY() 函数用来获取指定日期是一周中的星期几。

结论

MariaDB YEARWEEK() 函数是一个非常实用的日期和时间处理函数,它可以将日期转换为年份和周数的组合值,通常用于按照年份和周数对数据进行分组或排序。通过本文的实例,我们学习了如何使用该函数获取指定日期的年份周数值、使用不同的 mode 参数影响计算结果、按年份周数值分组统计记录数、将年份周数值转换为日期格式以及统计每个年份周数值的记录数等操作。掌握了 YEARWEEK() 函数的用法,将有助于我们更好地处理与日期和时间相关的问题。