ITPub博客

首页 > 数据库 > Oracle > 时间类型及格式转换

时间类型及格式转换

原创 Oracle 作者:lusklusklusk 时间:2016-12-31 11:46:55 0 删除 编辑
SELECT SYSTIMESTAMP FROM DUAL;查询出来的结果是默认的,timestamp默认精确到秒后6位
2016/12/31 10:49:51.263720 +08:00
SELECT SYSTIMESTAMP+0 FROM DUAL;查询处理的结果当天,默认为sysdate
2016/12/31 10:49:51
SELECT SYSTIMESTAMP+1 FROM DUAL;查询处理的结果当天,默认为sysdate+1
2017/1/1 10:49:51



select last_day(sysdate) from dual;返回当月最后一天




TO_CHAR函数将日期转为字符
TO_CHAR(date,’格式’);


select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm字段的结果显示为月,而不是显示为分钟
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒 




select to_char(sysdate) s1,                               --返回当前日期,无时分秒
        to_char(sysdate,'yyyy-mm-dd') s2,                 --返回当前日期,无时分秒
        to_char(sysdate,'yyyy') s3,                       --返回当前年份
        to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,      --返回当前日期时间
        to_char(sysdate, 'hh24:mi:ss') s5,                --返回当前24小时制时间
        to_char(sysdate,'DAY') s6                         --返回当前星期
from dual;




select sysdate S1,                    
     trunc(sysdate) S2,                 --返回当前日期,无时分秒
     trunc(sysdate,'year') YEAR,        --返回当前年的1月1日,无时分秒
     trunc(sysdate,'month') MONTH ,     --返回当前月的1日,无时分秒
     trunc(sysdate,'day') DAY           --返回当前星期的星期天,无时分秒
from dual





TO_DATE函数将字符转换为日期  
TO_DATE(char[, '格式']) 


SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL
SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL
SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL
SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL
SELECT TO_DATE('2006', 'YYYY') FROM DUAL
select to_date(substr('2016-07-22 08:31:26.672',1,19),'yyyy-mm-dd hh24:mi:ss') from dual
2016/7/22 8:31:26




to_timestamp函数将字符转换为日期  
to_timestamp(char[, '格式']) 
select to_timestamp('2016-07-22 08:31:26.672','yyyy-mm-dd hh24:mi:ss.ff3') from dual
2016/7/22 8:31:26.672000000





当前时间+1天的方法有四种如下
select sysdate,sysdate+1 as res from dual;
SELECT SYSTIMESTAMP,SYSTIMESTAMP+1 FROM DUAL;
select sysdate,sysdate+numtodsinterval(1,'day') as res from dual;
select systimestamp,systimestamp+numtodsinterval(1,'day') as res from dual;



当前时间+1年的方法如下
select sysdate,sysdate+numtoyminterval(1,'year') as res from dual;



numtodsinterval(,) ,x是一个数字,c是一个字符串,c只能是'DAY'、'HOUR'、'MINUTE'、'SECOND'
numtoyminterval(,) ,x是一个数字,c是一个字符串,c只能是'YEAR'、'MONTH'





遇到分区表可以直接如下操作如下
分区字段的属性TIMESTAMP(3)或date,可以如下
alter table XX add PARTITION p01 VALUES LESS THAN (timestamp '2016-08-01 00:00:00.000')

分区字段的属性date,可以如下
alter table XX add PARTITION p01 VALUES LESS THAN (to_date('2003-1-1','yyyy-mm-dd'))

分区字段的属性varchar2(20),可以如下
alter table XX add PARTITION p01 VALUES LESS THAN (to_date('2004-1-1','yyyy-mm-dd'))

分区表自动分区,按每周自动分区
alter table tablename set INTERVAL(numtodsinterval(7,'day'));




job里面下一个工作的17点运行job的设置,不能直接SYSDATE+17/24,SYSDATE+17/24表示每17个小时运行一次
interval=>'TRUNC(SYSDATE+1)+17/24'





dbms_utility.get_time精确到毫秒
获取前一个操作和后一个操作耗时多少秒
create or replace procedure time_to_s_test as
v_i int;
v_j int;
begin
select dbms_utility.get_time into v_i from dual;
dbms_lock.sleep(5);
select dbms_utility.get_time into v_j from dual;
dbms_output.put_line('开始='||v_i||' 结束='||v_j||' 时间差='||to_char(v_j-v_i)/100);
end;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30126024/viewspace-2131724/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。 Oracle OCM、Mysql OCP, 10年DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    348
  • 访问量
    1174937