Oracle中如何計算時間差

來源:互聯網
上載者:User
計算時間差是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諮詢公司。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.