| 導購 | 订阅 | 在线投稿
分享
 
 
 

在Oracle9i中計算時間差

來源:互聯網  2008-05-31 22:07:47  評論

計算時間差是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;

  計算時間差是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;
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有