oracle日期函数.docx

上传人:b****3 文档编号:3938508 上传时间:2022-11-26 格式:DOCX 页数:10 大小:19.18KB
下载 相关 举报
oracle日期函数.docx_第1页
第1页 / 共10页
oracle日期函数.docx_第2页
第2页 / 共10页
oracle日期函数.docx_第3页
第3页 / 共10页
oracle日期函数.docx_第4页
第4页 / 共10页
oracle日期函数.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

oracle日期函数.docx

《oracle日期函数.docx》由会员分享,可在线阅读,更多相关《oracle日期函数.docx(10页珍藏版)》请在冰豆网上搜索。

oracle日期函数.docx

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~23

MI:

一小时中的分钟

SS:

一分钟中的秒

SSSS:

从午夜开始过去的秒数

to_char():

将日期转按一定格式换成字符类型

SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:

mi:

ss')timefromdual;

TIME

-------------------

2004-10-0815:

22:

58

即把当前时间按yyyy-mm-ddhh24:

mi:

ss格式转换成字符类型

在oracle中处理日期大全

  TO_DATE格式  

Day:

  

ddnumber12  

dyabbreviatedfri  

dayspelledoutfriday  

ddspthspelledout,ordinaltwelfth  

Month:

  

mmnumber03  

monabbreviatedmar  

monthspelledoutmarch  

Year:

  

yytwodigits98  

yyyyfourdigits1998  

24小时格式下时间范围为:

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

3.  

求某天是星期几  

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_datefromtable1  

UNION  

select1,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=American  

altersessionsetNLS_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_parameters  

select*fromV$NLS_PARAMETERS  

8.  

selectcount(*)  

from(selectrownum-1rnum  

fromall_objects  

whererownum<=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')  

not  

in('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'))"MONTHS"FROMDUAL;  

1  

selectmonths_between(to_date('02-01-1999','MM-DD-YYYY'),  

to_date('12-31-1998','MM-DD-YYYY'))"MONTHS"FROMDUAL;  

1.03225806451613  

10.Next_day的用法  

Next_day(date,day)  

Monday-Sunday,forformatcodeDAY  

Mon-Sun,forformatcodeDY  

1-7,forformatcodeD  

11  

selectto_char(sysdate,'hh:

mi:

ss')TIMEfromall_objects  

注意:

第一条记录的TIME与最后一行是一样的  

可以建立一个函数来处理这个问题  

createorreplacefunctionsys_datereturndateis  

begin  

returnsysdate;  

end;  

selectto_char(sys_date,'hh:

mi:

ss')fromall_objects;  

12.  

获得小时数  

SELECTEXTRACT(HOURFROMTIMESTAMP'2001-02-162:

38:

40')fromoffer  

SQL>selectsysdate,to_char(sysdate,'hh')fromdual;  

SYSDATETO_CHAR(SYSDATE,'HH')  

-----------------------------------------  

2003-10-1319:

35:

2107  

SQL>selectsysdate,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)  

)  

)days  

from(select  

trunc(months_between(newer_date,older_date)/12)YEARS,  

mod(trunc(months_between(newer_date,older_date)),  

12)MONTHS,  

newer_date,  

older_date  

from(selecthiredateolder_date,  

add_months(hiredate,rownum)+rownumnewer_date  

fromemp)  

)  

14.  

处理月份天数不定的办法  

selectto_char(add_months(last_day(sysdate)+1,-2),'yyyymmdd'),last_day(sysdate)fromdual  

16.  

找出今年的天数  

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  

-----------  

yyyy990099  

rrrr991999  

yyyy010001  

rrrr012001  

18.不同时区的处理  

selectto_char(NEW_TIME(sysdate,'GMT','EST'),'dd/mm/yyyyhh:

mi:

ss'),sysdate  

fromdual;  

19.  

5秒钟一个间隔  

SelectTO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300)*300,'SSSSS'),TO_CHAR(sysdate,'SSSSS')  

fromdual  

2002-11-19:

55:

0035786  

SSSSS表示5位秒数  

20.  

一年的第几天  

selectTO_CHAR(SYSDATE,'DDD'),sysdatefromdual  

3102002-11-610:

03:

51  

21.计算小时,分,秒,毫秒  

select  

Days,  

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))mSeconds  

from  

(  

select  

trunc(sysdate)Days,  

sysdate-trunc(sysdate)A  

fromdual  

)  

select*fromtabname  

orderbydecode(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)

例:

SQL>selectadd_months(sysdate,12)"NextYear"fromdual;

NextYear

----------

13-11月-04

SQL>selectadd_months(sysdate,112)"LastYear"fromdual;

LastYear

----------

13-3月-13

SQL>

2、current_date()返回当前会放时区中的当前日期

date_value:

=current_date

SQL>columnsessiontimezonefora15

SQL>selectsessiontimezone,current_datefromdual;

SESSIONTIMEZONECURRENT_DA

-------------------------

+08:

0013-11月-03

SQL>altersessionsettime_zone='-11:

00'

  2/

会话已更改。

SQL>selectsessiontimezone,current_timestampfromdual;

SESSIONTIMEZONECURRENT_TIMESTAMP

---------------------------------------------------

-11:

0012-11月-0304.59.13.668000下午-11:

          00

SQL>

3、current_timestamp()以timestampwithtimezone数据类型返回当前会放时区中的当前日期

timestamp_with_time_zone_value:

=current_timestamp([timestamp_precision])

SQL>columnsessiontimezonefora15

SQL>columncurrent_timestampformata36

SQL>selectsessiontimezone,current_timestampfromdual;

SESSIONTIMEZONECURRENT_TIMESTAMP

---------------------------------------------------

+08:

0013-11月-0311.56.28.160000上午+08:

          00

SQL>altersessionsettime_zone='-11:

00'

  2/

会话已更改。

SQL>selectsessiontimezone,current_timestampfromdual;

SESSIONTIMEZONECURRENT_TIMESTAMP

---------------------------------------------------

-11:

0012-11月-0304.58.00.243000下午-11:

          00

SQL>

4、dbtimezone()返回时区

varchar_value:

=dbtimezone

SQL>selectdbtimezonefromdual;

DBTIME

------

-07:

00

SQL>

5、extract()找出日期或间隔值的字段值

date_value:

=extract(date_fieldfrom[datetime_value|interval_value])

SQL>selectextract(monthfromsysdate)"ThisMonth"fromdual;

ThisMonth

----------

      11

SQL>selectextract(yearfromadd_months(sysdate,36))"3YearsOut"fromdual;

3YearsOut

-----------

    2006

SQL>

6、last_day()返回包含了日期参数的月份的最后一天的日期

date_value:

=last_day(date_value)

SQL>selectlast_day(date'2000-02-01')"LeapYr?

"fromdual;

LeapYr?

----------

29-2月-00

SQL>selectlast_day(sysdate)"Lastdayofthismonth"fromdual;

Lastdayo

----------

30-11月-03

SQL>

7、localtimestamp()返回会话中的日期和时间

timestamp_value:

=localtimestamp

SQL>columnlocaltimestampformata28

SQL>selectlocaltimestampfromdual;

LOCALTIMESTAMP

----------------------------

13-11月-0312.09.15.433000

下午

SQL>selectlocaltimestamp,current_timestampfromdual;

LOCALTIMESTAMPCURRENT_TIMESTAMP

----------------------------------------------------------------

13-11月-0312.09.31.00600013-11月-0312.09.31.006000下午+08:

下午00

SQL>altersessionsettime_zone='-11:

00';

会话已更改。

SQL>selectlocaltimestamp,to_char(sysdate,'DD-MM-YYYYHH:

MI:

SSAM')"SYSDATE"fromdual;

LOCALTIMESTAMPSYSDATE

----------------------------------------------------

12-11月-0305.11.31.25900013-11-200312:

11:

31下午

下午

SQL>

8、months_between()判断两个日期之间的月份数量

number_value:

=months_between(date_value,date_value)

SQL>selectmonths_between(sysdate,date'1971-05-18')fromdual;

MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')

----------------------------------------

                    389.855143

SQL>selectmonths_between(sysdate,date'2001-01-01')fromdual;

MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01')

----------------------------------------

                    34.4035409

SQL>

9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)

?

周相?

日期函?

1.查询某周的第一天

selecttrunc(decode(ww,53,to_date(yy||'3112','yyyyddmm'),to_date(yy||'-'||to_char(ww*7),'yyyy-ddd')),'d')last_day

from(selectsubstr('2004-32',1,4)yy,to_number(substr('2004-32',6))ww

      fromdual)

selecttrunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6first_dayfromdual

selectmin(v_date)from

  (select(to_date('200201','yyyymm')+rownum)v_date

  fromall_tables

  whererownum<370)

whereto_char(v_date,'yyyy-iw')='2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1