程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle兩個時間函數的探究

oracle兩個時間函數的探究

編輯:Oracle教程

oracle兩個時間函數的探究


近來經常用到時間函數,在此寫一個筆記,記錄自己的所得,希望也對您有所幫助。

1、對於一個時間如 sysdate:2015/1/30 14:16:03如何只得到年月日,同時它的數據類型不變化呢?

最容易想到的是to_char然後在to_date,以前我所能想到的就是這個,因為覺得麻煩在網上搜了一下,找到了另外一種方法,trunc(sysdate),即可得到想要的結果

select sysdate from dual;
 
SYSDATE
-----------
2015/1/30 1
 
 select to_date(to_char(sysdate,'yyyymmdd'),'yyyymmdd') from dual;
 
TO_DATE(TO_CHAR(SYSDATE,'YYYYM
------------------------------
2015/1/30
 
 select trunc(sysdate) from dual;
 
TRUNC(SYSDATE)
--------------
2015/1/30

2、有了上面的鋪墊在進行下面的時間比對就簡單多了

有這麼一個需求,我在每個季度的第一天要修改一筆數據,這筆數據必須是上一季度前十天之前添加的。即:7月1日修改4月10日(包括)之前添加的數據

這個時候就用到了MONTHS_BETWEEN函數,期初我是這麼考慮的,

如果數據的添加時間是4月10日23點59分59秒,這樣和7月1日做運算的結果為:2.67741972

如果數據的添加時間是4月11日0點0分0秒,這樣和7月1日做運算的結果為:2.67741935

而4月10日與7月10日的運算結果為:2.70967741

為了確保時間的可控性,想到了使用年月日,去除掉時間的時分秒

具體代碼如下:(使用to_date('20150701','yyyymmdd') 來模擬時間參數)

select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),to_date('20150410 23:59:59','yyyymmdd HH24:mi:ss')) time from dual;
 
      TIME
----------
2.67741972
 
 select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),to_date('20150411 00:00:00','yyyymmdd HH24:mi:ss')) time from dual;
 
      TIME
----------
2.67741935
 
 select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),to_date('20150410','yyyymmdd')) time from dual;
 
      TIME
----------
2.70967741

 select MONTHS_BETWEEN(to_date('20150701','yyyymmdd'),trunc(to_date('20150410 15:23:38','yyyymmdd HH24:mi:ss'))) time from dual;
 
      TIME
----------
2.70967741
 

 最終不用肯定是使用trunc和months_between兩者相結合來完成這個需求了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved