2017-10-13 100 views
-1

在mysql中,我有從今天開始生成1年+ 1天的代碼,然後爲特定用戶設置expiryDate字段(日期數據類型)在Mysql中設置日期比當前值晚一年,或者從今天開始一年

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

但現在我需要修改它,這樣,如果expiryDate的當前值爲null或早於今天做,因爲它目前正在做,但如果遲於今天我希望它一年增加並有一天到目前的價值。因此,例如,如果當前值爲二零一七年十二月十七日我想將它設置爲2018年12月18日,我無法工作,如何做一個單一更新聲明

回答

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) 
+0

'INTERVAL 366 DAY'不會在閏年工作 – kchason

+0

謝謝,似乎工作 –

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

+0

你不檢查日期是否比今天的日期。 – Barmar

+0

更正,謝謝。 – kchason

+0

現在你根本沒有更新那些行。他們應該從今天起更新爲1年+ 1天。 – Barmar

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 
相關問題