oracle 計算時間間距

months_between  

MONTHS_BETWEEN (x, y)用於計算x和y之間有幾個月。

如果x在日曆中比y早,那麼MONTHS_BETWEEN()就返回一個負數。   

當x 和 y 之間的月份之差不是整月的時候,可以採用小數表示,例如   

SELECT MONTHS_BETWEEN('25-MAY-2008', '15-JAN-2008')   FROM dual;   

MONTHS_BETWEEN('25-MAY-2008','15-JAN-2008')   4.32258065   months_between(date1, date2),必須注意的是,date1與date2都爲Date類型,不然會出現錯誤。須用to_date(‘’,'') 來轉換爲日期格式,才能參加計算。

 

***months_between與round計算出的結果不同,round更精確一些??還是都有誤差??

 

有兩個日期數據START_DATE,END_DATE,欲得到這兩個日期的時間差(以天,小時,分鐘,秒,毫秒):

  天:

  ROUND(TO_NUMBER(END_DATE - START_DATE))

  小時:

  ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)

  分鐘:

  ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)

  秒:

  ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)

  毫秒:

  ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)

 

 

 

select  months_between(sysdate,t.purchase_date),t.purchase_date from host_lib t;

select  ROUND(TO_NUMBER(sysdate - t.purchase_date)),t.purchase_date from host_lib t;

 

 

 

附:

日期運算函數  
2  
3 ADD_MONTHS(d,n)  
4  --時間點d再加上n個月  
5  
6  ex.  
7   select sysdate, add_months(sysdate,2) aa from dual;  
8  
9   SYSDATE    AA  
10   ---------- ----------  
11   21-SEP-07  21-NOV-07  
12  
13 LAST_DAY(d)  
14  --時間點d當月份最後一天  
15  
16  ex.  
17   select sysdate, LAST_DAY(sysdate) LAST_DAY from dual;  
18  
19   SYSDATE    LAST_DAY  
20   ---------- ---------  
21   21-SEP-07  30-SEP-07  
22  
23 NEXT_DAY(d,number)  
24  --◎ 時間點d開始,下一個星期幾的日期  
25  --◎ 星期日 = 1  星期一 = 2  星期二 = 3  
26  --   星期三 = 4  星期四 = 5  星期五 = 6  星期六 = 7  
27  
28  ex.  
29   select sysdate, NEXT_DAY(sysdate,2) aa from dual;  
30  
31   SYSDATE    AA  
32   ---------- ----------  
33   21-SEP-07  24-SEP-07  
34  
35 MONTHS_BETWEEN(d1,d2)  
36  --計算d1與d2相隔的月數  
37  
38  ex.  
39   select trunc(MONTHS_BETWEEN(to_date('20071101','yyyymmdd'),  
40          to_date('20070820','yyyymmdd'))) aa   
41   from dual;  
42  
43         AA  
44   ----------  
45          2  
46  
47 NEW_TIME(d,c1,c2)  
48  --轉換新時區  
49  
50  ex.  
51   select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') 臺北,   
52          to_char(NEW_TIME(sysdate,'EST','GMT'),'YYYY/MM/DD HH24:MI:SS') 格林威治   
53   from dual;  
54  
55   臺北                 格林威治  
56   -------------------- -------------------  
57   2007/09/21 14:36:53  2007/09/21 19:36:53  
58  
59 ROUND(d[,fmt])  
60  --◎ 對日期作四捨五入運算  
61  --◎ 月的四捨五入以每月的15號為基準  
62  --◎ 年的四捨五入以每年6月為基準  
63  
64  ex.  
65   select sysdate, ROUND(sysdate,'year') aa from dual;  
66  
67   SYSDATE    AA  
68   ---------- ----------  
69   21-SEP-07  01-JAN-08  
70  
71   select sysdate, ROUND(sysdate,'month') aa from dual;  
72  
73   SYSDATE    AA  
74   ---------- ----------  
75   21-SEP-07  01-OCT-07  
76  
77 TRUNC(d[,fmt])  
78   --對日期作擷取運算  
79  
80  ex.  
81   select sysdate, TRUNC(sysdate,'year') aa from dual;  
82  
83   SYSDATE    AA  
84   ---------- ----------  
85   21-SEP-07  01-JAN-07  
86  
87   select sysdate, TRUNC(sysdate,'month') aa from dual;  
88  
89   SYSDATE    AA  
90   ---------- ----------  
91   21-SEP-07  01-SEP-07 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章