-
Oracle日期函数学习时,在教程有几个实例如下:
1.Months_between(’01-sep-95’, ’11-jan-94’)
2.结果是:19.6774194
3.
4.Add_months 在指定的月份上面增加相应得月份
5.例如:
6.Add_months(’11-jan-94’, 6)
7.结果是:11-jul-94
8.
9.Next_day 计算规定日期的后一个特定日期
10.例如:
11.Next_day(’01-sep-95’, ‘Friday’ )
12.结果是:
13.08-sep-95
14.
15.Last_day 指这个月最后一天
16.例如:
17.Last_day(’01-feb-95’)
然而在SQL*plus输入这些函数执行时,却总得不到正确的结果,因为日期的格式无法识别。正确的用法应该如下:
select MONTHS_BETWEEN('24-2月-2010','24-2月-2010') from dual。这样写很不方便,为了避免出现这样的问题,在自己书写日期时,最好用自己喜欢的方式书写,并用to_date函数指定格式如:
1.select MONTHS_BETWEEN(to_date('20100224','yyyymmdd'),to_date('20100524','yyyymmdd')) from dual
这里涉及到一个to_date函数,它将输入的字符串序列,转换为指定格式的日期函数,由此可得其它更为全面的实例为:
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时区=other时区的日期和时间 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如果为字符的话,它的星期形式需要与当前session默认时区中的星期形式相同。
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.则会执行出错,提供你说周中的日无效,就是这个原因了。
35.6.SYSDATE
36.用来得到系统的当前日期
37.CURRENT_DATE 返回当前session所在时区的默认时间
38.sysdate与current_date获得的时间不一定相同,某些情况下current_date会比sysdate快一秒。经过与xyf_tck(兄台的大作Oracle的工作机制写的很好,深入浅出)的短暂交流,我们认为current_date是将current_timestamp中毫秒四舍五入后的返回,虽然没有找到文档支持,但是想来应该八九不离十。同时,仅是某些情况下会有一秒的误差,一般情况下并不会对你的操作造成影响,所以了解即可。
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.将字符串转化为Oracle中的一个日期
59.日期函数:
60.greatest(d1,d2,...dn) 给出的日期列表中最后的日期
61.least(d1,k2,...dn) 给出的日期列表中最早的日期
62.to_char(d [,fmt]) 日期d按fmt指定的格式转变成字符串
63.to_date(st [,fmt]) 字符串st按fmt指定的格式转成日期值,若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 月份的罗马数字 I,...XII
78.YY或YYYY 两位,四位数字年
79.HH:MI:SS 时:分:秒
80.HH12或HH24 以12小时或24小时显示
81.MI 分
82.SS 秒
83.AM或PM 上下午指示符
84.SP 后缀SP要求拼写出任何数值字段
85.TH 后缀TH表示添加的数字是序数 4th,1st
86.FM 前缀对月或日或年值,禁止填充
87.---------------------------------
88.9.求两日期某一部分的差(比如秒)
89. 直接用两个日期相减(比如d1-d2=12.3)
90. SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
91.10.根据差值求新的日期(比如分钟)
92. SELECT sysdate+8/60/24 vaule FROM DUAL;
93.11.求不同时区时间
94. SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL; 95. -----时区参数,北京在东8区应该是Ydt-------
96. AST ADT 大西洋标准时间
97. BST BDT 白令海标准时间
98. CST CDT 中部标准时间
99. EST EDT 东部标准时间
100. GMT 格林尼治标准时间
101. HST HDT 阿拉斯加—夏威夷标准时间
102. MST MDT 山区标准时间
103. NST 纽芬兰标准时间
104. PST PDT 太平洋标准时间
105. YST YDT YUKON标准时间
106.12 求某一时间之前之后的时间
107.当前时间减去7分钟的时间
108.select sysdate,sysdate - interval '7' MINUTE from dual 109.前时间减去7小时的时间
110.select sysdate - interval '7' hour from dual 111.当前时间减去7天的时间
112.select sysdate - interval '7' day from dual 113.当前时间减去7月的时间
114.select sysdate,sysdate - interval '7' month from dual 115.当前时间减去7年的时间
116.select sysdate,sysdate - interval '7' year from dual 117.时间间隔乘以一个数字
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函数对应的另两个函数是:
to_char用于将日期和数值转换为字符,也可包含格式字符串
to_number用于将字符串转换为数值,包含格式字符串 本文出自:亿恩科技【www.enkj.com】
服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]
|