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

MariaDB PERIOD_DIFF() 函数用来计算两个年月期间值之间的月数差。它可以计算出两个年月形式的日期值相差多少个月。

发布于

MariaDB PERIOD_DIFF() 函数用来计算两个年月期间值之间的月数差。它可以计算出两个年月形式的日期值相差多少个月。这个函数通常用于需要计算日期时间跨度的场景。

语法

MariaDB PERIOD_DIFF() 函数的语法如下:

PERIOD_DIFF(P1, P2)
  • P1: 被减数年月期间值。
  • P2: 减数年月期间值。

年月期间值的格式为 YYYYMMYYYYMMMM。该函数返回一个整数值,表示 P1P2 之间相差的月数。

实例

计算两个年月期间值相差月数

此实例展示如何使用 PERIOD_DIFF() 计算两个年月期间值之间相差的月数。

SELECT PERIOD_DIFF(202302, 202301) AS months_diff;

以下是该语句的输出:

+-------------+
| months_diff |
+-------------+
|           1 |
+-------------+

该语句计算 202302 (2023 年 2 月) 与 202301 (2023 年 1 月) 之间相差 1 个月。

计算入职日期与当前日期相差月数

此实例展示如何使用 PERIOD_DIFF() 计算员工入职日期与当前日期相差月数。

首先创建一个员工表:

DROP TABLE IF EXISTS employees;
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    hired_period INT
);

INSERT INTO employees VALUES
    (1, 'John Doe', 202105),
    (2, 'Jane Smith', 202211),
    (3, 'Bob Johnson', 202301);

然后查询每个员工入职至今相差月数:

SELECT
    id, name,
    PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), hired_period) AS months_employed
FROM employees;

以下是该语句的输出:

+----+-------------+-----------------+
| id | name        | months_employed |
+----+-------------+-----------------+
|  1 | John Doe    |              34 |
|  2 | Jane Smith  |              16 |
|  3 | Bob Johnson |              14 |
+----+-------------+-----------------+

该查询先将当前日期转换为年月期间值格式 YYYYMM,再与每个员工的 hired_period 进行 PERIOD_DIFF() 计算,从而得到员工入职至今的月数。

计算每个员工入职几年几月

此实例展示如何使用 PERIOD_DIFF() 计算每个员工入职了几年几月。

SELECT
    id, name, hired_period,
    FLOOR(PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), hired_period) / 12) AS years,
    PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), hired_period) % 12 AS months
FROM employees;

以下是该语句的输出:

+----+-------------+--------------+-------+--------+
| id | name        | hired_period | years | months |
+----+-------------+--------------+-------+--------+
|  1 | John Doe    |       202105 |     2 |     10 |
|  2 | Jane Smith  |       202211 |     1 |      4 |
|  3 | Bob Johnson |       202301 |     1 |      2 |
+----+-------------+--------------+-------+--------+

该查询先用 PERIOD_DIFF() 计算出每个员工入职至今的月数,然后将月数除以 12 取整数部分作为年数,月数模 12 作为月数。

计算两个日期间隔月数

PERIOD_DIFF() 通常用于年月日期间隔计算,但也可以结合其他函数计算非年月形式日期的间隔月数。此实例展示了这一用法:

SELECT
    PERIOD_DIFF(
        DATE_FORMAT('2023-03-15', '%Y%m'),
        DATE_FORMAT('2022-07-01', '%Y%m')
    ) AS months_diff;

以下是该语句的输出:

+-------------+
| months_diff |
+-------------+
|           8 |
+-------------+

该语句首先使用 DATE_FORMAT() 将两个日期转换为年月形式,然后再用 PERIOD_DIFF() 计算两个日期间隔的月数。

计算新年剩余时间

此实例展示如何使用 PERIOD_DIFF() 计算距离新年还剩余多少天。

SELECT
    PERIOD_DIFF(
        DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 YEAR), '%Y%m'),
        DATE_FORMAT(CURDATE(), '%Y%m')
    ) AS remaining_months,
    LAST_DAY(CURDATE()) - CURDATE() AS remaining_days;

以下是该语句的输出:

+------------------+----------------+
| remaining_months | remaining_days |
+------------------+----------------+
|               12 |             22 |
+------------------+----------------+

该语句先用 DATE_ADD(CURDATE(), INTERVAL 1 YEAR) 得到下一年的日期,再分别将这个日期和当前日期转换为年月形式,并用 PERIOD_DIFF() 计算两者相差月数,得到距离新年还剩余几个月。

然后用 LAST_DAY(CURDATE()) 取当月最后一天,减去当前日期即可得到当月剩余天数。

相关函数

以下是几个与 MariaDB PERIOD_DIFF() 相关的函数:

  • MariaDB PERIOD_ADD() 函数用来对年月期间值进行加减操作。
  • MariaDB EXTRACT() 函数用来从日期或时间值中提取出年、月、日、时、分、秒等部分。
  • MariaDB DATE_ADD() 函数用来对日期或时间值进行加减操作。
  • MariaDB DATEDIFF() 函数用来计算两个日期值之间相差的天数。

结论

MariaDB PERIOD_DIFF() 函数提供了一种方便的方式来计算两个年月期间值之间相差的月数。通过简单传入两个年月期间值作为参数,即可快速获得它们之间的月数差值。这个函数在需要计算日期时间跨度的场景下非常实用,如计算员工入职至今的月数、计算两个日期间隔月数等。同时,结合其他一些日期函数的使用,该函数的应用场景也更加广泛。掌握了该函数的用法,就能更好地处理日期计算相关的问题。