You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

整数类型YYYYMMDD格式日期列:历史日期年份加1的实现方法

解决方案

你的问题核心是整数格式的日期无法直接用DATE_ADD处理——DATE_ADD需要日期类型参数,而非数字格式的日期值。必须先把整数转成标准日期类型处理,再转回整数格式。

正确的UPDATE语句

UPDATE your_table 
SET enddate = CAST(DATE_FORMAT(DATE_ADD(STR_TO_DATE(enddate, '%Y%m%d'), INTERVAL 1 YEAR), '%Y%m%d') AS UNSIGNED)
WHERE STR_TO_DATE(enddate, '%Y%m%d') < CURDATE();

语句拆解

  • STR_TO_DATE(enddate, '%Y%m%d'):把整数YYYYMMDD转换成MySQL可识别的日期类型,比如将20220129转为2022-01-29。
  • DATE_ADD(..., INTERVAL 1 YEAR):对转换后的日期执行加一年操作,2022-01-29会变成2023-01-29。
  • DATE_FORMAT(..., '%Y%m%d'):把加一年后的日期再转回YYYYMMDD格式的字符串。
  • CAST(... AS UNSIGNED):将字符串转成无符号整数,匹配你的列类型。
  • WHERE条件:用转换后的日期和当前日期CURDATE()比较,筛选出早于今日的记录。

简化写法(利用隐式转换)

如果你的MySQL版本支持,也可以用更简洁的方式,通过加0实现字符串转数字:

UPDATE your_table 
SET enddate = DATE_FORMAT(DATE_ADD(STR_TO_DATE(enddate, '%Y%m%d'), INTERVAL 1 YEAR), '%Y%m%d') + 0
WHERE STR_TO_DATE(enddate, '%Y%m%d') < CURDATE();

注意事项

  • 替换语句中的your_table为你实际的表名。
  • 确保enddate列的所有值都是合法的YYYYMMDD格式整数,否则STR_TO_DATE会返回NULL,导致更新出错,建议先排查数据合法性。

内容的提问来源于stack exchange,提问作者aphextwig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:50:43