ORACLE中如何計算時間差

2021-04-20 07:12:51 字數 1570 閱讀 1900

計算時間差是oracle data資料型別的乙個常見問題。oracle支援日期計算,你可以建立諸如「日期1-日期2」這樣的表示式來計算這兩個日期之間的時間差。

一旦你發現了時間差異,你可以使用簡單的技巧來以天、小時、分鐘或者秒為單位來計算時間差。為了得到資料差,你必須選擇合適的時間度量單位,這樣就可以進行資料格式隱藏。

使用完善複雜的轉換函式來轉換日期是乙個**,但是你會發現這不是最好的解決方法。

round(to_number(end-date-start_date))- 消逝的時間(以天為單位)

round(to_number(end-date-start_date)*24)- 消逝的時間(以小時為單位)

round(to_number(end-date-start_date)*1440)- 消逝的時間(以分鐘為單位)

顯示時間差的預設模式是什麼?為了找到這個問題的答案,讓我們進行乙個簡單的sql *plus查詢。

sql> select sysdate-(sysdate-3) from dual;

sysdate-(sysdate-3)

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

3這裡,我們看到了oracle使用天來作為消逝時間的單位,所以我們可以很容易的使用轉換函式來把它轉換成小時或者分鐘。然而,當分鐘數不是乙個整數時,我們就會遇到放置小數點的問題。

select

(sysdate-(sysdate-3.111))*1440

from

dual;

(sysdate-(sysdate-3.111))*1440

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

4479.83333

當然,我們可以用round函式(即取整函式)來解決這個問題,但是要記住我們必須首先把date資料型別轉換成number資料型別。

select

round(to_number(sysdate-(sysdate-3.111))*1440)

from

dual;

round(to_number(sysdate-(sysdate-3.111))*1440)

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

4480

我們可以用這些函式把乙個消逝時間近似轉換成分鐘並把這個值寫入oracle**中。在這個例子裡,我們有乙個離線(logoff)系統級觸發機制來計算已經開始的會話時間並把它放入乙個oracle statspack user_log擴充套件**之中。

update

perfstat.stats$user_log

set elapsed_minutes =

round(to_number(logoff_time-logon_time)*1440)

where

user = user_id

and elapsed_minutes is null;

本文作者donald bunleson是一名有著23年工作經驗的資料庫管理員,他編寫了14本資料庫方面的書籍並發表了100多篇文章。他還是oracle internals的主編,同時他還開辦了bunleson oracle諮詢公司。

Oracle中如何計算時間差

計算時間差是oracle data資料型別的乙個常見問題。oracle支援日期計算,你可以建立諸如 日期1 日期2 這樣的表示式來計算這兩個日期之間的時間差。一旦你發現了時間差異,你可以使用簡單的技巧來以天 小時 分鐘或者秒為單位來計算時間差。為了得到資料差,你必須選擇合適的時間度量單位,這樣就可以...

Oracle中如何計算時間差

計算時間差是oracle data資料型別的乙個常見問題。oracle支援日期計算,你可以建立諸如 日期1 日期2 這樣的表示式來計算這兩個日期之間的時間差。一旦你發現了時間差異,你可以使用簡單的技巧來以天 小時 分鐘或者秒為單位來計算時間差。為了得到資料差,你必須選擇合適的時間度量單位,這樣就可以...

Oracle中如何計算時間差

計算時間差是oracle data資料型別的乙個常見問題。oracle支援日期計算,你可以建立諸如 日期1 日期2 這樣的表示式來計算這兩個日期之間的時間差。一旦你發現了時間差異,你可以使用簡單的技巧來以天 小時 分鐘或者秒為單位來計算時間差。為了得到資料差,你必須選擇合適的時間度量單位,這樣就可以...