文章詳情頁(yè)
在Oracle9i中Oracle DATA計(jì)算時(shí)間差
瀏覽:3日期:2023-11-22 18:59:49
計(jì)算時(shí)間差是Oracle DATA數(shù)據(jù)類(lèi)型的一個(gè)常見(jiàn)問(wèn)題。Oracle支持日期計(jì)算,你可以創(chuàng)建諸如“日期1-日期2”這樣的表達(dá)式來(lái)計(jì)算這兩個(gè)日期之間的時(shí)間差。 一旦你發(fā)現(xiàn)了時(shí)間差異,你可以使用簡(jiǎn)單的技巧來(lái)以天、小時(shí)、分鐘或者秒為單位來(lái)計(jì)算時(shí)間差。為了得到數(shù)據(jù)差,你必須選擇合適的時(shí)間度量單位,這樣就可以進(jìn)行數(shù)據(jù)格式隱藏。 使用完善復(fù)雜的轉(zhuǎn)換函數(shù)來(lái)轉(zhuǎn)換日期是一個(gè)誘惑,但是你會(huì)發(fā)現(xiàn)這不是最好的解決方法。 round(to_number(end-date-start_date))- 消逝的時(shí)間(以天為單位); round(to_number(end-date-start_date)*24)- 消逝的時(shí)間(以小時(shí)為單位); round(to_number(end-date-start_date)*1440)- 消逝的時(shí)間(以分鐘為單位)。 顯示時(shí)間差的默認(rèn)模式是什么?為了找到這個(gè)問(wèn)題的答案,讓我們進(jìn)行一個(gè)簡(jiǎn)單的SQL *Plus查詢。 SQL> select sysdate-(sysdate-3) from dual;SYSDATE-(SYSDATE-3)------------------- 3這里,我們看到了Oracle使用天來(lái)作為消逝時(shí)間的單位,所以我們可以很輕易的使用轉(zhuǎn)換函數(shù)來(lái)把它轉(zhuǎn)換成小時(shí)或者分鐘。然而,當(dāng)分鐘數(shù)不是一個(gè)整數(shù)時(shí),我們就會(huì)碰到放置小數(shù)點(diǎn)的問(wèn)題。 Select(sysdate-(sysdate-3.111))*1440fromdual;(SYSDATE-(SYSDATE-3.111))*1440------------------------------4479.83333當(dāng)然,我們可以用ROUND函數(shù)(即取整函數(shù))來(lái)解決這個(gè)問(wèn)題,但是要記住我們必須首先把DATE數(shù)據(jù)類(lèi)型轉(zhuǎn)換成NUMBER數(shù)據(jù)類(lèi)型。 Selectround(to_number(sysdate-(sysdate-3.111))*1440)fromdual;ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440)---------------------------------------------- 4480我們可以用這些函數(shù)把一個(gè)消逝時(shí)間近似轉(zhuǎn)換成分鐘并把這個(gè)值寫(xiě)入Oracle表格中。在這個(gè)例子里,我們有一個(gè)離線(logoff)系統(tǒng)級(jí)觸發(fā)機(jī)制來(lái)計(jì)算已經(jīng)開(kāi)始的會(huì)話時(shí)間并把它放入一個(gè)OracleSTATSPACK USER_LOG擴(kuò)展表格之中。 Updateperfstat.stats$user_logsetelapsed_minutes =round(to_number(logoff_time-logon_time)*1440)whereuser = user_idandelapsed_minutes is NULL;
標(biāo)簽:
Oracle
數(shù)據(jù)庫(kù)
排行榜
