您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle日期函数
1、转换函数与date操作关系最大的就是两个转换函数:to_date(),to_char()to_date()作用将字符类型按一定格式转化为日期类型:具体用法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。如;to_date('2004-11-2713:34:43','yyyy-mm-ddhh24:mi:ss')将得到具体的时间多种日期格式:YYYY:四位表示的年份YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪MM:01~12的月份编号MONTH:九个字符表示的月份,右边用空格填补MON:三位字符的月份缩写WW:一年中的星期D:星期中的第几天DD:月份中的第几天DDD:年所中的第几天DAY:九个字符表示的天的全称,右边用空格补齐HH,HH12:一天中的第几个小时,12进制表示法HH24:一天中的第几个小时,取值为00~23MI:一小时中的分钟SS:一分钟中的秒SSSS:从午夜开始过去的秒数to_char():将日期转按一定格式换成字符类型SQLselectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')timefromdual;TIME-------------------2004-10-0815:22:58即把当前时间按yyyy-mm-ddhh24:mi:ss格式转换成字符类型在oracle中处理日期大全TO_DATE格式Day:ddnumber12dyabbreviatedfridayspelledoutfridayddspthspelledout,ordinaltwelfthMonth:mmnumber03monabbreviatedmarmonthspelledoutmarchYear:yytwodigits98yyyyfourdigits199824小时格式下时间范围为:0:00:00-23:59:59....12小时格式下时间范围为:1:00:00-12:59:59....[ZT]日期和??函???1.日期和字符转换函数用法(to_date,to_char)2.selectto_char(to_date(222,'J'),'Jsp')fromdual显示TwoHundredTwenty-Two3.求某天是星期几selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day')fromdual;星期一selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE=American')fromdual;monday设置日期语言ALTERSESSIONSETNLS_DATE_LANGUAGE='AMERICAN';也可以这样TO_DATE('2002-08-26','YYYY-mm-dd','NLS_DATE_LANGUAGE=American')4.两个日期间的天数selectfloor(sysdate-to_date('20020405','yyyymmdd'))fromdual;5.时间为null的用法selectid,active_datefromtable1UNIONselect1,TO_DATE(null)fromdual;注意要用TO_DATE(null)6.a_datebetweento_date('20011201','yyyymmdd')andto_date('20011231','yyyymmdd')那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。所以,当时间需要精确的时候,觉得to_char还是必要的7.日期格式冲突问题输入的格式要看你安装的ORACLE字符集的类型,比如:US7ASCII,date格式的类型就是:'01-Jan-01'altersystemsetNLS_DATE_LANGUAGE=AmericanaltersessionsetNLS_DATE_LANGUAGE=American或者在to_date中写selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE=American')fromdual;注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,可查看select*fromnls_session_parametersselect*fromV$NLS_PARAMETERS8.selectcount(*)from(selectrownum-1rnumfromall_objectswhererownum=to_date('2002-02-28','yyyy-mm-dd')-to_date('2002-02-01','yyyy-mm-dd')+1)whereto_char(to_date('2002-02-01','yyyy-mm-dd')+rnum-1,'D')notin('1','7')查找2002-02-28至2002-02-01间除星期一和七的天数在前后分别调用DBMS_UTILITY.GET_TIME,让后将结果相减(得到的是1/100秒,而不是毫秒).9.selectmonths_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY'))MONTHSFROMDUAL;1selectmonths_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY'))MONTHSFROMDUAL;1.0322580645161310.Next_day的用法Next_day(date,day)Monday-Sunday,forformatcodeDAYMon-Sun,forformatcodeDY1-7,forformatcodeD11selectto_char(sysdate,'hh:mi:ss')TIMEfromall_objects注意:第一条记录的TIME与最后一行是一样的可以建立一个函数来处理这个问题createorreplacefunctionsys_datereturndateisbeginreturnsysdate;end;selectto_char(sys_date,'hh:mi:ss')fromall_objects;12.获得小时数SELECTEXTRACT(HOURFROMTIMESTAMP'2001-02-162:38:40')fromofferSQLselectsysdate,to_char(sysdate,'hh')fromdual;SYSDATETO_CHAR(SYSDATE,'HH')-----------------------------------------2003-10-1319:35:2107SQLselectsysdate,to_char(sysdate,'hh24')fromdual;SYSDATETO_CHAR(SYSDATE,'HH24')-------------------------------------------2003-10-1319:35:2119获取年月日与此类似13.年月日的处理selectolder_date,newer_date,years,months,abs(trunc(newer_date-add_months(older_date,years*12+months)))daysfrom(selecttrunc(months_between(newer_date,older_date)/12)YEARS,mod(trunc(months_between(newer_date,older_date)),12)MONTHS,newer_date,older_datefrom(selecthiredateolder_date,add_months(hiredate,rownum)+rownumnewer_datefromemp))14.处理月份天数不定的办法selectto_char(add_months(last_day(sysdate)+1,-2),'yyyymmdd'),last_day(sysdate)fromdual16.找出今年的天数selectadd_months(trunc(sysdate,'year'),12)-trunc(sysdate,'year')fromdual闰年的处理方法to_char(last_day(to_date('02'||:year,'mmyyyy')),'dd')如果是28就不是闰年17.yyyy与rrrr的区别'YYYY99TO_C-----------yyyy990099rrrr991999yyyy010001rrrr01200118.不同时区的处理selectto_char(NEW_TIME(sysdate,'GMT','EST'),'dd/mm/yyyyhh:mi:ss'),sysdatefromdual;19.5秒钟一个间隔SelectTO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300)*300,'SSSSS'),TO_CHAR(sysdate,'SSSSS')fromdual2002-11-19:55:0035786SSSSS表示5位秒数20.一年的第几天selectTO_CHAR(SYSDATE,'DDD'),sysdatefromdual3102002-11-610:03:5121.计算小时,分,秒,毫秒selectDays,A,TRUNC(A*24)Hours,TRUNC(A*24*60-60*TRUNC(A*24))Minutes,TRUNC(A*24*60*60-60*TRUNC(A*24*60))Seconds,TRUNC(A*24*60*60*100-100*TRUNC(A*24*60*60))mSecondsfrom(selecttrunc(sysdate)Days,sysdate-trunc(sysdate)Afromdual)select*fromtabnameorderbydecode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');//floor((date2-date1)/365)作为年floor((date2-date1,365)/30)作为月mod(mod(date2-date1,365),30)作为日.23.next_day函数next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。1234567日一二三四五六oracle中有很多关于日期的函数在oracle中有很多关于日期的函数,如:1、add_months()用于从一个日期值增加或减少一些月份date_value:=add_months(date_value,number_of_months)例:SQLselectadd_months(sysdate,12)NextYearfromdual;NextYear----------13-11月-04SQLselectadd_months(sysdate,112)LastYearfromdual;LastYear----------13-3月-13SQL2、current_date()返回当前会放时区中的当前日期date_value:=current_dateSQLcolumnsessiontimezonefora15SQLselectsessiontimezone,current_datefromdual
本文标题:oracle日期函数
链接地址:https://www.777doc.com/doc-12625 .html