从MariaDB中的日期中提取周数的5个函数

发布于

以下是 5 个函数,可让您从 MariaDB 中的日期返回周数。四个只返回一周,一个返回一周和年份的总和。

函数WEEK()

该函数返回给定日期的周。WEEK()

例:

SELECT WEEK('2023-07-25');

结果:

+——————–+ | WEEK(‘2023-07-25’) | +——————–+ | 30 | +——————–+

该函数接受可选的第二个参数来指定模式。您从此功能获得的实际结果将取决于所使用的模式。如果省略 mode 参数,则使用系统变量的值。WEEK()``default_week_format

请参阅WEEK()如何在 MariaDB 中工作,了解有关每种模式和示例的更多信息。

函数EXTRACT()

该函数允许您从日期中提取指定的单位。因此,您可以使用它从日期中提取周(以及其他单位)。``EXTRACT()

例:

SELECT EXTRACT(WEEK FROM '2023-07-25');

结果:

+———————————+ | EXTRACT(WEEK FROM ‘2023-07-25’) | +———————————+ | 30 | +———————————+

函数DATE_FORMAT()

该函数允许您根据格式字符串格式化日期。格式字符串指定应如何设置日期格式。DATE_FORMAT()

因此,您可以使用此函数从日期返回周(以及任何其他单位)。返回周数有多种选项,具体取决于一周从哪一天开始等。

下面是一个以各种形式返回周的示例:

SELECT 
    DATE_FORMAT('2023-01-01', '%U') AS "%U",
    DATE_FORMAT('2023-01-01', '%u') AS "%u",
    DATE_FORMAT('2023-01-01', '%V') AS "%V",
    DATE_FORMAT('2023-01-01', '%v') AS "%v";

结果:

+——+——+——+——+ | %U | %u | %V | %v | +——+——+——+——+ | 01 | 00 | 01 | 52 | +——+——+——+——+

以下是每个格式说明符的说明:

格式说明符 描述
%U 周数 (00-53),当一周的第一天是星期日时。
%u 周数 (00-53),当一周的第一天是星期一时。
%V 周数 (01-53),当一周的第一天是星期日时。与一起使用。%X
%v 周数 (01-53),当一周的第一天是星期一时。与一起使用。%x

这是上表中提到的andas的描述:%X``%x

格式说明符 描述
%X 当一周的第一天是星期日时,以 4 位数字表示年份。与一起使用。%V
%x 当一周的第一天是星期一时,带有 4 位数字的年份。与一起使用。%v

如果需要,我们可以组合格式说明符以将年份和星期一起返回:

SELECT 
    DATE_FORMAT('2023-01-01', '%X, %V') AS "%X, %V",
    DATE_FORMAT('2023-01-01', '%x, %v') AS "%x, %v";

结果:

+———-+———-+ | %X, %V | %x, %v | +———-+———-+ | 2023, 01 | 2022, 52 | +———-+———-+

请注意,周数并不总是反映上述示例 - 这取决于使用的实际日期。

让我们将日期向前移动一年:

SELECT 
    DATE_FORMAT('2024-01-01', '%U') AS "%U",
    DATE_FORMAT('2024-01-01', '%u') AS "%u",
    DATE_FORMAT('2024-01-01', '%V') AS "%V",
    DATE_FORMAT('2024-01-01', '%v') AS "%v";

结果:

+——+——+——+——+ | %U | %u | %V | %v | +——+——+——+——+ | 00 | 01 | 53 | 01 | +——+——+——+——+

这次我们得到了一组不同的结果。

以下是我们进入今年时会发生什么:

SELECT 
    DATE_FORMAT('2024-12-12', '%U') AS "%U",
    DATE_FORMAT('2024-12-12', '%u') AS "%u",
    DATE_FORMAT('2024-12-12', '%V') AS "%V",
    DATE_FORMAT('2024-12-12', '%v') AS "%v";

结果:

+——+——+——+——+ | %U | %u | %V | %v | +——+——+——+——+ | 49 | 50 | 49 | 50 | +——+——+——+——+

如您所见,返回周数并不总是像我们希望的那样清晰。

请参阅MariaDB格式字符串 获取可用于的格式字符串/说明符的完整列表。DATE_FORMAT()

函数YEARWEEK()

可以一次性获得一周_和_年份。该函数返回给定日期的年份和周。YEARWEEK()

例:

SELECT YEARWEEK('2023-01-01');

结果:

+————————+ | YEARWEEK(‘2023-01-01’) | +————————+ | 202301 | +————————+

结果中的年份可能与一年中第一周和最后一周的日期参数中的年份不同。

如果我们向前推进一年,会发生什么:

SELECT YEARWEEK('2024-01-01');

结果:

+————————+ | YEARWEEK(‘2024-01-01’) | +————————+ | 202353 | +————————+

与函数一样,该函数接受可选的第二个参数来指定模式。您从此功能获得的实际结果将取决于所使用的模式。如果省略 mode 参数,则使用系统变量的值。WEEK()``YEARWEEK()``default_week_format

请参阅YEARWEEK()如何在 MariaDB 中工作,了解有关每种模式和示例的更多信息。