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
selectsysdate, add_months(sysdate,2) aafromdual;
8
9
SYSDATE AA
10
---------- ----------
11
21-SEP-07 21-NOV-07
12
13
LAST_DAY(d)
14
--時間點d當月份最後一天
15
16
ex.
17
selectsysdate, LAST_DAY(sysdate) LAST_DAYfromdual;
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
selectsysdate, NEXT_DAY(sysdate,2) aafromdual;
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
selecttrunc(MONTHS_BETWEEN(to_date('20071101','yyyymmdd'),
40
to_date('20070820','yyyymmdd'))) aa
41
fromdual;
42
43
AA
44
----------
45
2
46
47
NEW_TIME(d,c1,c2)
48
--轉換新時區
49
50
ex.
51
selectto_char(sysdate,'YYYY/MM/DD HH24:MI:SS') 台北,
52
to_char(NEW_TIME(sysdate,'EST','GMT'),'YYYY/MM/DD HH24:MI:SS') 格林威治
53
fromdual;
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
selectsysdate, ROUND(sysdate,'year') aafromdual;
66
67
SYSDATE AA
68
---------- ----------
69
21-SEP-07 01-JAN-08
70
71
selectsysdate, ROUND(sysdate,'month') aafromdual;
72
73
SYSDATE AA
74
---------- ----------
75
21-SEP-07 01-OCT-07
76
77
TRUNC(d[,fmt])
78
--對日期作擷取運算
79
80
ex.
81
selectsysdate, TRUNC(sysdate,'year') aafromdual;
82
83
SYSDATE AA
84
---------- ----------
85
21-SEP-07 01-JAN-07
86
87
selectsysdate, TRUNC(sysdate,'month') aafromdual;
88
89
SYSDATE AA
90
---------- ----------
91
21-SEP-07 01-SEP-07