始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

Oracle学习笔记之日期函数

发布时间:  2012/8/22 16:44:49

-
 
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]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线