時間型別及格式轉換

lusklusklusk發表於2016-12-31
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部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2131724/,如需轉載,請註明出處,否則將追究法律責任。

相關文章