有这样一个场景:数据库还款计划表有到期还款日字段,正常是每月2日。但这个字段有些是每月1日,现需要统一改成2日,可以用到DATE_ADD函数,但是执行时需要注意:只能执行一次
DATE_ADD(date,INTERVAL expr type)
具体语句:
select * from ms_repayment_plan where substr(loan_pmt_due_date,9,2)='01'; # 先查出数据,01结尾5条数据
UPDATE ms_repayment_plan SET loan_pmt_due_date=DATE_ADD(loan_pmt_due_date,INTERVAL 1 DAY)
where substr(loan_pmt_due_date,9,2)='01'; # 然后更新2019-12-01变成2019-12-02
上面的sql语句用到两个函数:
SUBSTR(str FROM pos FOR len)-->substr(loan_pmt_due_date,9,2)='01'表示从loan_pmt_due_date字段第9个字符开始截取2个字符串
DATE_ADD(date,INTERVAL expr type)-->loan_pmt_due_date=DATE_ADD(loan_pmt_due_date,INTERVAL 1 DAY)表示对字段loan_pmt_due_date的时间增加1天
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:
Type 值 |
---|
MICROSECOND |
SECOND |
MINUTE |
HOUR |
DAY |
WEEK |
MONTH |
QUARTER |
YEAR |
SECOND_MICROSECOND |
MINUTE_MICROSECOND |
MINUTE_SECOND |
HOUR_MICROSECOND |
HOUR_SECOND |
HOUR_MINUTE |
DAY_MICROSECOND |
DAY_SECOND |
DAY_MINUTE |
DAY_HOUR |
YEAR_MONTH |
把问题变得更复杂一点:假设有两个借款,其中一个借款1的到期还款日为2日,借款2的到期还款日为10日。这个字段loan_pmt_due_date日期有多个。此时我们的DATE_ADD函数是无法处理这个问题的,下篇文章介绍另外一个函数DATE_FORMAT处理此问题。