Oracle計算N天前、N月前

問題

想查詢N天前的日誌文件相關信息,日誌文件名格式爲:interface_YYYYMMDD.loghtml

方案

一、如何計算N天前

在oracle中,能夠對data類型的直接+1來將天數加一
具體過程爲:先截取文件名上時間,轉爲date類型,再加一後轉爲char與傳入的參數值checkDate進行比較
to_char(to_date(SUBSTR(t.file_name, 11, 8), 'yyyymmdd') + 1, 'yyyymmdd') = &checkDate
固然,因爲對date類型的加減操做是基於的,能夠經過對基準單位進行相關操做,例如:oracle

  • SYSDATE - 10:十天前
  • SYSDATE + 1/24:一小時後
  • SYSDATE + 1/(24 * 60):一分鐘後
  • SYSDATE + 1/(24*60*60):一秒後

也存在另外一種寫法,使用INTERVAL時間間隔:函數

  • SYSDATE + INTERVAL '100' DAY(3):一百天之後,注意DAY(3):3表示精確度,表示偏移量'100'爲3位。DAY默認爲DAY(2)
  • SYSDATE + INTERVAL '12' HOUR:十二小時後
  • SYSDATE + INTERVAL '100' MINUTE:一百分鐘後
  • SYSDATE + INTERVAL '100' Second:一百秒後

二、如何計算N月前:

也許你想到了使用INTERVAL '1' MONTH來計算。確實,通常狀況下,使用該方法獲得的結果是正確的。驗證.net

SELECT to_date('20170831', 'yyyymmdd') + INTERVAL '1' MONTH FROM dual

會發現報錯:ORA-01839日誌

Oracle存在add_months(date, offset)函數,能夠計算N月前:
add_months(SYSDATE, -1):一月前
一樣,驗證20170831:code

SELECT add_months(to_date('20170831', 'yyyymmdd'), 1) FROM dual

輸出爲:2017/9/30htm

三、如何計算N年前:

add_years()? 並無……
add_months(to_date('20170831', 'yyyymmdd'), -12*3):三年前blog

參考文章

 oracle 用interval 求時間
ora 01839這個錯誤是怎麼回事?get

相關文章
相關標籤/搜索