-
Oracle日期函數(shù)學(xué)習(xí)時,在教程有幾個實(shí)例如下:
1.Months_between(’01-sep-95’, ’11-jan-94’)
2.結(jié)果是:19.6774194
3.
4.Add_months 在指定的月份上面增加相應(yīng)得月份
5.例如:
6.Add_months(’11-jan-94’, 6)
7.結(jié)果是:11-jul-94
8.
9.Next_day 計算規(guī)定日期的后一個特定日期
10.例如:
11.Next_day(’01-sep-95’, ‘Friday’ )
12.結(jié)果是:
13.08-sep-95
14.
15.Last_day 指這個月最后一天
16.例如:
17.Last_day(’01-feb-95’)
然而在SQL*plus輸入這些函數(shù)執(zhí)行時,卻總得不到正確的結(jié)果,因?yàn)槿掌诘母袷綗o法識別。正確的用法應(yīng)該如下:
select MONTHS_BETWEEN('24-2月-2010','24-2月-2010') from dual。這樣寫很不方便,為了避免出現(xiàn)這樣的問題,在自己書寫日期時,最好用自己喜歡的方式書寫,并用to_date函數(shù)指定格式如:
1.select MONTHS_BETWEEN(to_date('20100224','yyyymmdd'),to_date('20100524','yyyymmdd')) from dual
這里涉及到一個to_date函數(shù),它將輸入的字符串序列,轉(zhuǎn)換為指定格式的日期函數(shù),由此可得其它更為全面的實(shí)例為:
1.1.ADD_MONTHS
2.增加或減去月份
3.SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;
2.TO_CHA
3.------
4.200002
5.SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;
2.TO_CHA
3.------
4.199910
5.2.LAST_DAY
6.返回日期的最后一天
7.SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;
2.TO_CHAR(SY TO_CHAR((S
3.---------- ----------
4.2004.05.09 2004.05.10
5.SQL> select last_day(sysdate) from dual;
6.LAST_DAY(S
7.----------
8.31-5月 -04
9.3.MONTHS_BETWEEN(date2,date1)
10.給出date2-date1的月份
11.SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;
2.MON_BETWEEN
3.-----------
4.9
5.SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual; 6.MON_BETW
7.---------
8.-60
9.注:SELECT months_between(SYSDATE, sysdate) same,
10.months_between(SYSDATE, add_months(sysdate, -1)) big,
11.months_between(SYSDATE, add_months(sysdate, 1))small
12.FROM DUAL;
13.SAME BIG SMALL
14.0 1 -1
15.4.NEW_TIME(date,'this','that') 16.給出在this時區(qū)=other時區(qū)的日期和時間 17.SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time 18.2 (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual; 19.BJ_TIME LOS_ANGLES
20.------------------- -------------------
21.2004.05.09 11:05:32 2004.05.09 18:05:32
22.5.NEXT_DAY(date,'day') 23.給出日期date和星期x之后計算下一個星期的日期
24.SQL> select next_day('18-5月-2001','星期五') next_day from dual; 25.NEXT_DAY
26.----------
27.25-5月 -01
28.注:返回指定日期后第一個n的日期,n為一周中的某一天。但是,需要注意的是n如果為字符的話,它的星期形式需要與當(dāng)前session默認(rèn)時區(qū)中的星期形式相同。
29.例如:三思用的中文nt,nls_language值為SIMPLIFIED CHINESE
30.SELECT NEXT_DAY(SYSDATE,5) FROM DUAL;
31.SELECT NEXT_DAY(SYSDATE,'星期四') FROM DUAL; 32.兩種方式都可以取到正確的返回,但是:
33.SELECT NEXT_DAY(SYSDATE,'Thursday') FROM DUAL; 34.則會執(zhí)行出錯,提供你說周中的日無效,就是這個原因了。
35.6.SYSDATE
36.用來得到系統(tǒng)的當(dāng)前日期
37.CURRENT_DATE 返回當(dāng)前session所在時區(qū)的默認(rèn)時間
38.sysdate與current_date獲得的時間不一定相同,某些情況下current_date會比sysdate快一秒。經(jīng)過與xyf_tck(兄臺的大作Oracle的工作機(jī)制寫的很好,深入淺出)的短暫交流,我們認(rèn)為current_date是將current_timestamp中毫秒四舍五入后的返回,雖然沒有找到文檔支持,但是想來應(yīng)該八九不離十。同時,僅是某些情況下會有一秒的誤差,一般情況下并不會對你的操作造成影響,所以了解即可。
39.SELECT SYSDATE,CURRENT_DATE FROM DUAL;
40.SYSDATE CURRENT_DATE
41.2008-12-23 PM 05:05:59 2008-12-23 PM 05:06:00
42.SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual; 43.TO_CHAR(SYSDATE,'
44.-----------------
45.09-05-2004 星期日
46.trunc(date,fmt)按照給出的要求將日期截斷,如果fmt='mi'表示保留分,截斷秒 47.SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh, 48.2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual; 49.HH HHMM
50.------------------- -------------------
51.2004.05.09 11:00:00 2004.05.09 11:17:00
52.7.TO_CHAR(date,'format') 53.SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual; 54.TO_CHAR(SYSDATE,'YY
55.-------------------
56.2004/05/09 21:14:41
57.8.TO_DATE(string,'format') 58.將字符串轉(zhuǎn)化為Oracle中的一個日期
59.日期函數(shù):
60.greatest(d1,d2,...dn) 給出的日期列表中最后的日期
61.least(d1,k2,...dn) 給出的日期列表中最早的日期
62.to_char(d [,fmt]) 日期d按fmt指定的格式轉(zhuǎn)變成字符串
63.to_date(st [,fmt]) 字符串st按fmt指定的格式轉(zhuǎn)成日期值,若fmt忽略,st要用缺省格式
64.round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期
65.trunc(d [,fmt]) 日期d按fmt指定格式截斷到最近的日期
66.附:
67.日期格式:
68.--------------------------------
69.格式代碼 說明 舉例或可取值的范圍
70.--------------------------------
71.DD 該月某一天 1-3
72.DY 三個大寫字母表示的周幾 SUN,...SAT
73.DAY 完整的周幾,大寫英文 SUNDAY,...SATURDAY
74.MM 月份 1-12
75.MON 三個大寫字母表示的月份 JAN,...DEC
76.MONTH 完整 JANUARY,...DECEMBER
77.RM 月份的羅馬數(shù)字 I,...XII
78.YY或YYYY 兩位,四位數(shù)字年
79.HH:MI:SS 時:分:秒
80.HH12或HH24 以12小時或24小時顯示
81.MI 分
82.SS 秒
83.AM或PM 上下午指示符
84.SP 后綴SP要求拼寫出任何數(shù)值字段
85.TH 后綴TH表示添加的數(shù)字是序數(shù) 4th,1st
86.FM 前綴對月或日或年值,禁止填充
87.---------------------------------
88.9.求兩日期某一部分的差(比如秒)
89. 直接用兩個日期相減(比如d1-d2=12.3)
90. SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
91.10.根據(jù)差值求新的日期(比如分鐘)
92. SELECT sysdate+8/60/24 vaule FROM DUAL;
93.11.求不同時區(qū)時間
94. SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL; 95. -----時區(qū)參數(shù),北京在東8區(qū)應(yīng)該是Ydt-------
96. AST ADT 大西洋標(biāo)準(zhǔn)時間
97. BST BDT 白令海標(biāo)準(zhǔn)時間
98. CST CDT 中部標(biāo)準(zhǔn)時間
99. EST EDT 東部標(biāo)準(zhǔn)時間
100. GMT 格林尼治標(biāo)準(zhǔn)時間
101. HST HDT 阿拉斯加—夏威夷標(biāo)準(zhǔn)時間
102. MST MDT 山區(qū)標(biāo)準(zhǔn)時間
103. NST 紐芬蘭標(biāo)準(zhǔn)時間
104. PST PDT 太平洋標(biāo)準(zhǔn)時間
105. YST YDT YUKON標(biāo)準(zhǔn)時間
106.12 求某一時間之前之后的時間
107.當(dāng)前時間減去7分鐘的時間
108.select sysdate,sysdate - interval '7' MINUTE from dual 109.前時間減去7小時的時間
110.select sysdate - interval '7' hour from dual 111.當(dāng)前時間減去7天的時間
112.select sysdate - interval '7' day from dual 113.當(dāng)前時間減去7月的時間
114.select sysdate,sysdate - interval '7' month from dual 115.當(dāng)前時間減去7年的時間
116.select sysdate,sysdate - interval '7' year from dual 117.時間間隔乘以一個數(shù)字
118.select sysdate,sysdate - 8 *interval '2' hour from dual 119.別的時間也可以做些類似的處理
120.select to_date('2007-12-12','yyyy-mm-dd'),to_date('2007-12-12','yyyy-mm-dd') - interval '7' day from dual
to_date函數(shù)對應(yīng)的另兩個函數(shù)是:
to_char用于將日期和數(shù)值轉(zhuǎn)換為字符,也可包含格式字符串
to_number用于將字符串轉(zhuǎn)換為數(shù)值,包含格式字符串 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|