在Mysql中设置日期比当前值晚一年,或者从今天起一年

时间:2017-10-13 15:54:08

标签: mysql

在mysql中,我有从今天开始生成1年+ 1天的代码,然后将expiryDate字段(日期数据类型)设置为特定用户的代码

e.g

UPDATE fulllicense set expiryDate='2018-10-14' where userid=1;

但现在我需要对其进行修改,以便如果expiryDate的当前值为null或早于今天,就像当前那样做,但是如果比今天晚,我希望它将当前值添加一年和一天。因此,例如,如果当前值是2017-12-17,我希望它设置为2018-12-18,我无法弄清楚如何在单个更新语句中执行此操作

3 个答案:

答案 0 :(得分:1)

使用IF

UPDATE fullllicense
SET expiryDate = DATE_ADD(DATE_ADD(IF(expirydate IS NULL OR expirydate < CURDATE(), CURDATE(), expirydate),
                                   INTERVAL 1 YEAR),
                          INTERVAL 1 DAY)

答案 1 :(得分:0)

我会使用DATE_ADD函数。您似乎已经处理了WHERE条款,因此我只使用您包含的条款。

UPDATE fulllicense
    SET expiryDate = DATE_ADD(DATE_ADD(expiryDate, INTERVAL 1 YEAR), INTERVAL 1 DAY)
    WHERE userid = 1
AND expiryDate > NOW(); 

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

答案 2 :(得分:0)

UPDATE fulllicense 
   SET expiryDate = 
       CASE WHEN expiryDate IS NULL OR expiryDate < CURDATE()  
           THEN '2018-10-14' 
           ELSE 
                DATE_ADD(DATE_ADD(expiryDate, INTERVAL 1 YEAR), INTERVAL 1 DAY) END