oracle日期函式(4)
在Oracle中實現時間相加處理
-- 名稱:Add_Times
-- 功能:返回d1與NewTime相加以後的結果,實現時間的相加
-- 說明:對於NewTime中的日期不予考慮
-- 日期:2004-12-07
-- 版本:1.0
-- 作者:Kevin
create or replace function Add_Times(d1 in date,NewTime in date) return date
is
hh number;
mm number;
ss number;
hours number;
dResult date;
begin
-- 下面依次取出時、分、秒
select to_number(to_char(NewTime,'HH24')) into hh from dual;
select to_number(to_char(NewTime,'MI')) into mm from dual;
select to_number(to_char(NewTime,'SS')) into ss from dual;
-- 換算出NewTime中小時總和,在一天的百分幾
hours := (hh + (mm / 60) + (ss / 3600))/ 24;
-- 得出時間相加後的結果
select d1 + hours into dResult from dual;
return(dResult);
end Add_Times;
-- 測試用例
-- select Add_Times(sysdate,to_date('2004-12-06 03:23:00','YYYY-MM-DD HH24:MI:SS')) from dual
在Oracle9i中計算時間差
計算時間差是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; [@more@]
-- 名稱:Add_Times
-- 功能:返回d1與NewTime相加以後的結果,實現時間的相加
-- 說明:對於NewTime中的日期不予考慮
-- 日期:2004-12-07
-- 版本:1.0
-- 作者:Kevin
create or replace function Add_Times(d1 in date,NewTime in date) return date
is
hh number;
mm number;
ss number;
hours number;
dResult date;
begin
-- 下面依次取出時、分、秒
select to_number(to_char(NewTime,'HH24')) into hh from dual;
select to_number(to_char(NewTime,'MI')) into mm from dual;
select to_number(to_char(NewTime,'SS')) into ss from dual;
-- 換算出NewTime中小時總和,在一天的百分幾
hours := (hh + (mm / 60) + (ss / 3600))/ 24;
-- 得出時間相加後的結果
select d1 + hours into dResult from dual;
return(dResult);
end Add_Times;
-- 測試用例
-- select Add_Times(sysdate,to_date('2004-12-06 03:23:00','YYYY-MM-DD HH24:MI:SS')) from dual
在Oracle9i中計算時間差
計算時間差是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; [@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017437/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle日期函式(1)Oracle函式
- oracle日期函式(2)Oracle函式
- oracle日期函式(3)Oracle函式
- oracle日期函式(5)Oracle函式
- Oracle的日期函式Oracle函式
- oracle 日期函式介紹Oracle函式
- Oracle的日期函式(轉)Oracle函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- oracle 10g函式大全–日期型函式Oracle 10g函式
- oracle 10g函式大全--日期型函式Oracle 10g函式
- oracle interval日期函式的bug!Oracle函式
- ORACLE日期時間函式大全Oracle函式
- oracle interval日期函式的bugOracle函式
- [轉]oracle日期函式集錦Oracle函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- Sql Server函式全解(4):日期和時間函式SQLServer函式
- ORACLE單行函式與多行函式之四:日期函式示例Oracle函式
- 日期函式函式
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- Oracle分析函式-4Oracle函式
- SQL函式之日期函式SQL函式
- ABAP日期函式函式
- Sybase日期函式函式
- sql 日期函式SQL函式
- 【Mysql 學習】日期函式函式MySql函式
- 字元函式、數字函式和日期函式字元函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- ORACLE TO_CHAR()函式中日期格式的使用Oracle函式
- SQLSERVER日期函式(zt)SQLServer函式
- 日期時間函式函式
- 日期提取函式EXTRACT函式
- Sql Server 日期函式SQLServer函式
- Oracle日期格式化以及extract函式的使用Oracle函式
- DBA_oracle日期函式-【來自多個專案】Oracle函式
- SQL 10 函式 3 日期時間函式 - 5 計算日期差額SQL函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Haskell 中的日期函式Haskell函式
- mysql日期函式總結MySql函式