您的位置:首页 > 数据库 > Oracle

Oracle常用日期函数

2008-04-10 10:20 295 查看
常用的时间格式掩码如下:

掩码元素 含义

YYYY 四位数年份 (如:2005) year

YY 二位数年份(如 05)

Q 季度(1-4)

MM 月份(01-12) month

WW 年的星期数(1-53),其中第一星期为年的第一天至第七天

W 月的星期数(1-5),其中第一星期为月的第一天至第七天

DDD 年的日(1-366)

DD 月的日(1-31)

D 周的日(1-7),其中周日为1,周六为7 day

HH24 24小时制(0-23) hour

MI 分钟(0-59) minute

SS 秒(0-59) second

SSSSS 自午夜之后的秒(0-86399)

两个很不错的函数,可以操作日期,也可以操作数值:

round(日期,'指定的日期掩码') 返回日期时间的四舍五入结果

指定的掩码不同则结果结果也不同

year 以 7月1日分界线

month 以16号为分界线

day 以中午12点为分界线

hh 以30分钟为分界线

mi 以30秒为分界线

trunc(日期,'指定的日期掩码') 返回截断时间

year 本年度的1月1日

month 本月的1号

例子:(注意: day d dd 三者的区别)

SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;

ROUND(TO_DATE('2007051616:31:4

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

2007-1-1

SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;

ROUND(TO_DATE('2007051616:31:4

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

2007-6-1

SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;

ROUND(TO_DATE('2007051616:31:4

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

2007-6-1

SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;

ROUND(TO_DATE('2007051616:31:4

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

2007-5-20

SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;

ROUND(TO_DATE('2007051616:31:4

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

2007-5-20

SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;

ROUND(TO_DATE('2007051616:31:4

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

2007-5-17

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;

TRUNC(TO_DATE('2007051616:31:4

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

2007-1-1

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;

TRUNC(TO_DATE('2007051616:31:4

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

2007-5-1

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;

TRUNC(TO_DATE('2007051616:31:4

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

2007-5-1

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;

TRUNC(TO_DATE('2007051616:31:4

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

2007-5-13

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;

TRUNC(TO_DATE('2007051616:31:4

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

2007-5-13

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;

TRUNC(TO_DATE('2007051616:31:4

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

2007-5-16

日期时间函数:

add_months(日期,number) 指定日期推迟number个月

last_day(日期) 指定日期当月的最后一天

new_time(日期,时区简写) 调整时区

next_day(日期,number) number表示周几,星期日是1,指定number的日期(一周内或一周后)

months_between(日期1,日期2) 日期1和日期2之间有几个月

sysdate 系统当期那日期和时间

练习时的代码:

select to_number(to_char(last_day(add_months(to_date('20040406','yyyymmdd'),-1))+1,'yyyymmdd')) from dual;

TO_NUMBER(TO_CHAR(LAST_DAY(ADD

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

20040401

select to_number(to_char(last_day(to_date('20040406','yyyymmdd')),'yyyymmdd')) from dual;

TO_NUMBER(TO_CHAR(LAST_DAY(ADD

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

20040430

create or replace procedure p_hkb_date_insert is

/*

过程功能描述:日期插入表中

*/

v_days number(10);

v_date date;

i number(10);

begin

begin

--取得当月天数

select to_number(to_char(last_day(sysdate), 'dd'))

into v_days

from dual;

--select sysdate from dual; 当前日期

--select last_day(sysdate) from dual; 月底日期

--select last_day(add_months(sysdate, -1)) from dual; 上月底日期

-- SELECT to_char(last_day(SYSDATE),'dd') days FROM dual; 当前月的天数

--select last_day(add_months(sysdate,-1))+1 from dual; 当前月第一天

--select to_number(to_char(sysdate,'yyyymmdd')) from dual;系统当前日期转换成如20070910格式:

end;

i := 1;

begin

select last_day(add_months(sysdate, -1)) into v_date from dual;

while i <= v_days

loop

insert into hkb_date

values

(v_date + i,

to_char(v_date + i, 'yyyymmdd'),

to_number(to_char(v_date + i, 'yyyymmdd')));

--insert into hkb_date

--(float_date)

-- values

--(to_char(v_date + i, 'yyyymmdd'));

-- insert into hkb_date

--(number_date)

-- values

--(to_number(to_char(v_date + i, 'yyyymmdd')));

i := i + 1;

end loop;

end;

end p_hkb_date_insert;

create table hkb_date_construct as select * from hkb_date where 1=2; 继承表字段

create table hkb_date_data as select * from hkb_date; 继承表记录

1.日期时间间隔操作



当前时间减去7分钟的时间

select sysdate,sysdate - interval '7' MINUTE from dual

当前时间减去7小时的时间

select sysdate - interval '7' hour from dual

当前时间减去7天的时间

select sysdate - interval '7' day from dual

当前时间减去7月的时间

select sysdate,sysdate - interval '7' month from dual

当前时间减去7年的时间

select sysdate,sysdate - interval '7' year from dual

时间间隔乘以一个数字

select sysdate,sysdate - 8 *interval '2' hour from dual



2.日期到字符操作

select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual

select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual

select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual

select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual

 参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)



3. 字符到日期操作

select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual

具体用法和上面的to_char差不多。



4. trunk/ ROUND函数的使用

select trunc(sysdate ,'YEAR') from dual

select trunc(sysdate ) from dual

select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual



5.oracle有毫秒级的数据类型

--返回当前时间 年月日小时分秒毫秒

select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;

--返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)

select to_char(current_timestamp(9),'MI:SSxFF') from dual;



6.计算程序运行的时间(ms)

declare

 type rc is ref cursor;

 l_rc rc;

 l_dummy all_objects.object_name%type;

 l_start number default dbms_utility.get_time;

begin

 for I in 1 .. 1000

 loop

 open l_rc for

 'select object_name from all_objects '||



'where object_id = ' || i;

 fetch l_rc into l_dummy;

 close l_rc;

 end loop;

 dbms_output.put_line

 ( round( (dbms_utility.get_time-l_start)/100, 2 ) ||

 ' seconds...' );

end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: