MYSQL - 当日期超过 1 年时更新行

标签 mysql datetime leap-year

如果 DateTimeAdded 为 1 年或更长,我的查询可以更新该行。但我发现它在闰年不起作用。大家有更好的建议吗?

 CREATE EVENT UpdateProduct
     ON SCHEDULE
       EVERY 1 DAY
         DO

 update `product`  set Label = "ClearStock"  where  datediff(now(),
 DateTimeAdded) >= 365

最佳答案

要识别 DateTimeAdded 值超过一年的行,您可以执行以下操作:

 ... WHERE DateTimeAdded < NOW() + INTERVAL -1 YEAR
<小时/>

跟进

演示:

SELECT NOW() + INTERVAL 0 HOUR AS `now`
     , DATE(NOW()) + INTERVAL -1 YEAR AS `year_ago`
     , t.DateTimeAdded
     , t.DateTimeAdded < DATE(NOW()) + INTERVAL -1 YEAR AS `compare`
  FROM ( SELECT '2015-01-24 11:00:00' AS `DateTimeAdded`
          UNION ALL
         SELECT '2015-01-25 13:00:00'
          UNION ALL
         SELECT '2015-01-26 14:00:00'
       ) t  

返回:

NOW                  year_ago    DateTimeAdded        compare  
-------------------  ----------  -------------------  -------
2016-01-25 22:11:56  2015-01-25  2015-01-24 11:00:00        1
2016-01-25 22:11:56  2015-01-25  2015-01-25 13:00:00        0
2016-01-25 22:11:56  2015-01-26  2015-01-26 14:00:00        0

关于MYSQL - 当日期超过 1 年时更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006332/

相关文章:

java - Joda 在 GMT 时区解析 ISO8601 日期

javascript - 闰年解决方案检查

asp.net - asp :RegularExpressionValidator with format MMddyy (leap year issue) 的正则表达式

java - 使用Java确定闰年?

mysql - 获取超过两个月的元素

php - PDO 获取返回空值

php - 从用户输入的选定日期在 MySQL 中始终存储为 "1970"

python - 在 pandas 中处理转换为 DateTime 的时间值而无需手动迭代?

mysql - SQL 在一个列表中但不在另一个列表中

mysql - 我怎样才能在mysql中建立这个查询