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

来源:互联网 发布:软件测试的生命周期 编辑:程序博客网 时间:2024/05/18 22:40
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'));
阅读全文
0 0
原创粉丝点击