MySQL WEEK Function

摘要:在本教程中,您将学习如何使用 MySQL WEEK函数来获取日期的周数。

MySQL WEEK函数介绍

通常,一年有 365 天(平年)和 366 天(闰年)。然后一年被分为几周,每周正好有 7 天。因此,一年通常有 365 / 7 = 52 周,范围从 1 到 52。

要检查特定日期是否属于哪个周数,请使用WEEK函数,如下所示:

WEEK(date, mode);
Code language: SQL (Structured Query Language) (sql)

WEEK函数接受两个参数:

  • date是您想要获取周数的日期。
  • mode是一个可选参数,决定周数计算的逻辑。它允许您指定一周是从星期一还是星期日开始,并且返回的周数应介于 0 到 52 或 0 到 53 之间。

如果忽略mode参数, WEEK函数将默认使用default_week_format系统变量的值。

要获取default_week_format变量的当前值,请使用SHOW VARIABLES语句,如下所示:

mysql> SHOW VARIABLES LIKE 'default_week_format';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| default_week_format | 0     |
+---------------------+-------+
1 row in set (0.01 sec)
Code language: SQL (Structured Query Language) (sql)

在我们的服务器中, default_week_format的默认值为 0。下表说明了mode参数如何影响WEEK函数:

模式一周的第一天范围第一周是第一周……
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今年有一个星期一

上表中“ with 4 or more days this year ”是指:

  • 如果包含 1 月 1 日的周在新年中有 4 天或更多天,则该周编号为第 1 周。
  • 否则,该周将编号为上一年的最后一周,下一周为第一周。

WEEK函数根据ISO 8601:1988返回后面的周数

MySQL WEEK 函数示例

请参阅示例数据库中的以下orders表。

订单表

以下语句使用WEEK函数返回 2013 年每周的订单数:

SELECT 
    WEEK(orderDate) week_no, 
    COUNT(*)
FROM
    orders
WHERE
    YEAR(orderDate) = 2003
GROUP BY WEEK(orderDate);
Code language: SQL (Structured Query Language) (sql)
MySQL WEEK Function example

在本教程中,您学习了如何使用 MySQL WEEK函数获取指定日期的周数。

本教程有帮助吗?