oracle計算兩個日期的時間差時分秒

風靈使發表於2018-06-30

Oracle函式可以實現諸多的功能,下面就介紹使用Oracle函式計算時間差的實現方法。

兩個Date型別欄位:START_DATEEND_DATE,計算這兩個日期的時間差(分別以天,小時,分鐘,秒,毫秒):

天: ROUND(TO_NUMBER(END_DATE - START_DATE))

小時: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)

分鐘: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)

秒: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)

毫秒: ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 1000)

例子:

select ROUND(TO_NUMBER(
to_date(to_char(sysdate,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd hh24:mi:ss') - to_date('2012-05-11 10:37:40','yyyy-MM-dd hh24:mi:ss'))*24*60*60) 
from dual
select ROUND(TO_NUMBER(to_date(to_char(sysdate,'yyyy-MM-dd hh24:mi:ss'),'yyyy-MM-dd hh24:mi:ss')
- to_date('2013-01-16 00:00:00','yyyy-MM-dd hh24:mi:ss'))*24*60*60) from dual

to_date如何取得毫秒?

由於oracledate型別只支援到秒,不支援到毫秒,所以to_date()不能取到毫秒。 如果要取到毫秒,oracle 9i以上版本,可以使用timestamp型別,是date的擴充套件型別,能支援到毫秒,毫秒的顯示精度是6位,不過有效位是3位,即最大值達到999,滿1000ms就進為1s。而與to_date()對應的轉換函式可以使用to_timestamp()select to_timestamp('2011-12-15 10:40:10.345', 'yyyy-MM-dd HH24:MI:ss.ff') as mydate from dual; 如果想將timestamp又轉換成date型別,可以使用cast()函式,但得到的date型別沒有了毫秒值。如下: select cast(to_timestamp('2011-12-15 10:40:10.345', 'yyyy-MM-dd HH24:MI:ss.ff') as date) as mydate from dual;


Oracle時間型別date,timestamp時間差計算

Oracle的時間型別有兩種datetimestamp. date精確到秒,timestamp精確到毫秒.

1.計算date型別的時間差

可以先把年,月,日,小時,分,秒用to_char函式拆分出來,再用to_number函式轉換成數值型別.有了這些單獨分開的時間就好辦了.就再一個個的去減,記得考慮單位換算就行.比如都轉換成小時或分之類的

示例:

declare

v_date date;

v_year int;

v_month int;

v_day int;

v_hour int;

v_minute int;

v_second int;

begin

 v_date := sysdate;

 v_year :=to_number( to_char(v_date,'yyyy'));

--月,日,小時,分,秒的拆分方法和上面年的一樣,只要把yyyy分別替換成mm,dd,hh,mi,ss就行了

end;

--timestamp型別的時間也可以用同樣的方法,但是這隻能精確到秒,後面的毫秒就忽略掉了

2.計算timestamp型別的時間差

to_char函式不能拆分出毫秒來.可以用另外一個函式extract

示例

declare

v_t timestamp;

v_year int;

v_s float;

begin

 v_t := systimestamp;

 v_year := extract(year from v_t);

--月,日,小時,分的拆分方法和上面的年一樣只要把year改成month,day,hour,minute就行.

v_s :=extract(second from v_t);--注意,這裡雖然也只能拆分到秒,但這裡的秒是帶小數點的,小數點後面的就是毫秒了.

end;

Oracle中兩個TIMESTAMP時間型別的差

首先需要先轉換成char型別

to_char(t.restime, 'yyyy-mm-dd hh24:mi:ss')

然後在轉換為date

TO_DATE((to_char(t.restime, 'yyyy-mm-dd hh24:mi:ss')),'yyyy-mm-dd hh24:mi:ss')

再將兩個date型別相減

to_number(
(
TO_DATE((to_char(t.restime, 'yyyy-mm-dd hh24:mi:ss')),'yyyy-mm-dd hh24:mi:ss') - 
TO_DATE(to_char(t.servertime, 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')
)
)* 86400 
as miao

相關文章