使用mysql

时间:2019-04-17 08:07:32

标签: mysql

给定一个过去的日期,我如何才能获得该日期在该日期的下一次出现?

例如,

如果今天是 2019-04-17

给出日期为 2015-02-27 ,我想使用mysql来操纵日期以返回 2020-02-27 ,即给出了2015年2月27日,今天之后的2月27日会发生什么?

给出日期为 2016-06-18 ,我想使用mysql操纵日期以返回 2019-06-18 ,即给定2016年6月18日,今天之后的6月18日会发生什么?

本质上,我在问如何在日期上添加年份,直到该日期在将来

2 个答案:

答案 0 :(得分:1)

如果故意使用示例,则可以使用INTERVAL来操纵日期。真的很简单。像这样的东西可以工作:

SELECT '2015-02-27' + INTERVAL 5 YEAR; -- Would return you '2020-02-27'.

SELECT '2016-06-18' + INTERVAL 3 YEAR; -- Would return you '2019-06-18'.

编辑:我可以想到一种实现条件的方法。希望能给你一些想法;)

SELECT CURDATE() AS 'Current Date',subscribe_date,
IF(DATE_FORMAT(subscribe_date,'%m-%d') < DATE_FORMAT(CURDATE(),'%m-%d'),
CONCAT_WS('-',YEAR(CURDATE()+INTERVAL 1 YEAR),DATE_FORMAT(subscribe_date,'%m-%d')),
CONCAT_WS('-',YEAR(CURDATE()),DATE_FORMAT(subscribe_date,'%m-%d'))) 'Next_occurance' FROM
(SELECT '2018-09-27' AS 'subscribe_date' UNION 
SELECT '2015-02-27') a;

答案 1 :(得分:0)

首先,您必须计算从该日期到现在的年数:

TIMESTAMPDIFF(YEAR, date_past, CURDATE())

将为您提供该信息。 您会在将来寻找该日期,因此它应该变为:

TIMESTAMPDIFF(YEAR, date_past, CURDATE())+1

最后,您可以计算将来的日期:

UPDATE table SET renewal_date = DATE_ADD(date, INTERVAL (TIMESTAMPDIFF(YEAR, date_past, CURDATE())+1) YEAR) 

未经测试,但应该为您完成工作。