【数据库】Mysql日期/时间函数实际案例
生活随笔
收集整理的這篇文章主要介紹了
【数据库】Mysql日期/时间函数实际案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有一款金融產品,總共24期,每月2日到期還款日,第一個到期還款日為放款日下個月的2日,現在我們知道所有訂單的放款時間,現在我們想統計每個訂單當前時間是第幾期。
舉個簡單例子:當期日期為2019-11-12,假設某個訂單的放款日期為2019-09-13,那么這個訂單當前就處于第2期。現在通過上篇文章的mysql時間日期函數統計相關數據。
分析:總共10筆訂單,有三個類型的賬單日prov_stg_day2、12、13。首先用賬單日對比當期日期,當前日期大于等于賬單日,當前期數cur_term加1;actual是預期值(用于判斷sql語句查出來的是否正確);
一、?已過到期還款日
select id,acp_dt,now(),prov_stg_day,actual,TIMESTAMPDIFF(MONTH,acp_dt,now()) as cur_term from hb_loanfile_detail where day(now())>prov_stg_day;查詢結果:有些cur_term計算錯誤,是由于TIMESTAMPDIFF函數計算:不足月是舍棄的,但實際我們只要隔月了就算一個月
所以我們可以對acp_dt進行處理:DATE_FORMAT(acp_dt,'%Y-%m-01')
select id,acp_dt,prov_stg_day,actual,TIMESTAMPDIFF(MONTH,DATE_FORMAT(acp_dt,'%Y-%m-01'),now()) as cur_term from hb_loanfile_detail where day(now())>prov_stg_day;二、?未過到期還款日
select id,acp_dt,prov_stg_day,actual,TIMESTAMPDIFF(MONTH,DATE_FORMAT(acp_dt,'%Y-%m-01'),now()) as cur_term from hb_loanfile_detail where day(now())<=prov_stg_day;用相同的方法發現查詢的cur_term是錯的,所以我們要轉換一下思路:
應該對now()進行處理:DATE_SUB(now(),interval 1 month)
所以最終兩個sql語句如下:
-- 已過到期還款日 select id,acp_dt,now(),prov_stg_day,actual,TIMESTAMPDIFF(MONTH,DATE_FORMAT(acp_dt,'%Y-%m-01'),now()) as cur_term from hb_loanfile_detail where day(now())>prov_stg_day; -- 未過或正好到期還款日 select id,acp_dt,now(),prov_stg_day,actual,TIMESTAMPDIFF(MONTH,DATE_FORMAT(acp_dt,'%Y-%m-01'),DATE_SUB(now(),interval 1 month)) as cur_term from hb_loanfile_detail where day(now())<=prov_stg_day;后面將介紹 case when then 語句對上面兩個sql進行整理,待續!!!
總結
以上是生活随笔為你收集整理的【数据库】Mysql日期/时间函数实际案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础学习Java-素数和
- 下一篇: 【工具】Jupyter Notebook