2014.8.28(放款时间) 20161103(输入天数) 20161128(结果)

2014.8.28(放款时间)     20161103(输入天数)   20161128(结果)
                                         20161129                      20161228
'yy-mm-dd'
需求:计算当前日期(输入)到放款日期天数最近的还款日期,包括当天可当天还款?(规则:结果天数为放款日期的天,如果当前天数小于放款日期天数,结果年月不变(输入的年月),否则,月份加1)

结果:
SET @my_paydate = '2016-08-31';
SET @my_now = '2016-12-30';

SELECT TIMESTAMPDIFF(MONTH,DATE_SUB(@my_paydate,INTERVAL DAYOFMONTH(@my_paydate)-1 DAY),DATE_SUB(@my_now,INTERVAL DAYOFMONTH(@my_now)-1 DAY)); -- 计算两个时间差 (年,月,日...),保持准确要把计算日期调整到计算日期的1号
SELECT PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m')); -- 计算两个日期相差多少个月,时间格式为%Y%m

过程:
SET @my_paydate = '2014-07-31';
SET @my_now = '2016-02-03';
SELECT
IF( DAYOFMONTH(@my_now)<=DAYOFMONTH(@my_paydate),
-- before
DATE_ADD(@my_paydate,INTERVAL PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m')) MONTH)
,
-- after
DATE_ADD(@my_paydate,INTERVAL PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m'))+1 MONTH)
)
;

SET @my_paydate = '2016-08-31';
SET @my_now = '2016-12-30';
SELECT TIMESTAMPDIFF(MONTH,DATE_SUB(@my_paydate,INTERVAL DAYOFMONTH(@my_paydate)-1 DAY),DATE_SUB(@my_now,INTERVAL DAYOFMONTH(@my_now)-1 DAY));


SELECT PERIOD_DIFF(DATE_FORMAT(@my_now,'%Y%m'),DATE_FORMAT(@my_paydate,'%Y%m'));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值