详解MySQL的PERIOD_ADD()函数:将一个月数添加到一个年份/月份值中

  • Post category:MySQL

MySQL函数PERIOD_ADD()

MySQL函数PERIOD_ADD()可以用于将两个周期表示的值相加,其返回值是一个新的周期表示的值。通常用于计算合同或证书的有效日期等。

PERIOD_ADD()函数的语法如下:

PERIOD_ADD(P,N)

其中,P是一个格式为YYMM或YYYYMM的周期表示值,N是一个正整数,表示要增加的周期数。

使用方法

假设我有一个字符串表示的日期:”201807″,以及一个整数表示的周期数:3,我想要计算出3个周期后的日期,并将其格式化为标准日期格式,那么可以使用PERIOD_ADD()函数,代码如下:

SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CONCAT(SUBSTR('201807', 1, 4),'-', SUBSTR('201807', 5, 2),'-','01'),'%Y-%m-%d'), INTERVAL PERIOD_ADD(SUBSTR('201807', 5, 2), 3) MONTH),'%Y-%m-%d');

代码解释:

  1. SUBSTR('201807', 1, 4)表示从字符串”201807″中截取从下标1开始的长度为4的子字符串,即表示年份的部分。

  2. SUBSTR('201807', 5, 2)表示从字符串”201807″中截取从下标5开始的长度为2的子字符串,即表示月份的部分。

  3. CONCAT(SUBSTR('201807', 1, 4),'-', SUBSTR('201807', 5, 2),'-','01')表示将格式化后的年月加上日组成标准日期格式。

  4. DATE_FORMAT(..., '%Y-%m-%d')表示将日期格式化为标准日期格式。

  5. PERIOD_ADD(SUBSTR('201807', 5, 2), 3)表示将月份的部分加上3个周期(即增加3个月)。

  6. DATE_ADD(..., INTERVAL ... MONTH)表示将日期加上指定的月份。

代码执行结果为:”2018-10-01″,即表示3个周期后的日期。

实例应用

实例1:计算合同结束日期

假设某公司与某客户签订了一份为期2年的合同,合同签订日期为2019年1月1日,那么可以使用PERIOD_ADD()函数来计算合同结束日期。

--计算合同结束日期
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CONCAT('2019','-', '01','-', '01'), '%Y-%m-%d'), INTERVAL PERIOD_ADD('01', 24) MONTH), '%Y-%m-%d');

代码解释:

  1. CONCAT('2019','-', '01','-', '01')表示将格式化后的年、月、日组成标准日期格式。

  2. PERIOD_ADD('01', 24)表示将月份的部分加上24个周期(即增加24个月)。

代码执行结果为:”2021-01-01″,即表示合同结束日期为2021年1月1日。

实例2:计算证书到期日期

某人的语言等级证书已经过期1年,证书颁发日期为2017年5月,证书有效期为2年,那么可以使用PERIOD_ADD()函数来计算证书的到期日期。

--计算证书到期日期
SELECT DATE_FORMAT(DATE_ADD(DATE_FORMAT(CONCAT('2017','-', '05','-', '01'), '%Y-%m-%d'), INTERVAL PERIOD_ADD('05', 35) MONTH), '%Y-%m-%d');

代码解释:

  1. CONCAT('2017','-', '05','-', '01')表示将格式化后的年、月、日组成标准日期格式。

  2. PERIOD_ADD('05', 35)表示将月份的部分加上35个周期(即增加35个月)。

代码执行结果为:”2020-04-01″,即表示证书的到期日期为2020年4月1日。

总的来说,使用PERIOD_ADD()函数可以方便快捷地计算周期性事件的时间。在实际应用中,你可以根据具体业务场景来结合其他函数和SQL语句,灵活运用PERIOD_ADD()函数,轻松实现各种日期计算功能。