给定一个过去的日期,我如何才能获得该日期在该日期的下一次出现?
例如,
如果今天是 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日会发生什么?
本质上,我在问如何在日期上添加年份,直到该日期在将来
答案 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)
未经测试,但应该为您完成工作。