Oracle的日期函数.docx

上传人:b****8 文档编号:12948451 上传时间:2023-06-09 格式:DOCX 页数:15 大小:19.23KB
下载 相关 举报
Oracle的日期函数.docx_第1页
第1页 / 共15页
Oracle的日期函数.docx_第2页
第2页 / 共15页
Oracle的日期函数.docx_第3页
第3页 / 共15页
Oracle的日期函数.docx_第4页
第4页 / 共15页
Oracle的日期函数.docx_第5页
第5页 / 共15页
Oracle的日期函数.docx_第6页
第6页 / 共15页
Oracle的日期函数.docx_第7页
第7页 / 共15页
Oracle的日期函数.docx_第8页
第8页 / 共15页
Oracle的日期函数.docx_第9页
第9页 / 共15页
Oracle的日期函数.docx_第10页
第10页 / 共15页
Oracle的日期函数.docx_第11页
第11页 / 共15页
Oracle的日期函数.docx_第12页
第12页 / 共15页
Oracle的日期函数.docx_第13页
第13页 / 共15页
Oracle的日期函数.docx_第14页
第14页 / 共15页
Oracle的日期函数.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Oracle的日期函数.docx

《Oracle的日期函数.docx》由会员分享,可在线阅读,更多相关《Oracle的日期函数.docx(15页珍藏版)》请在冰点文库上搜索。

Oracle的日期函数.docx

Oracle的日期函数

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'')=''2002-49''

2.查询某周的最后一天

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

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

fromdual)

selecttrun

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

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2