Oracle 計算兩個日期相差天時分秒


1、用到oracle相關函數 

     round、trunc、to_number、to_date

    1.1 round(number[,decimals]) 四舍五入

          number:指需要處理的數值,是必須填寫的值。

    decimals:指在進行四舍五入運算時 , 小數的應取的位數,該參數可以不填,不填的時候,系統默認小數位數取0。

    1.2 trunc(number[,num_digits])

          number:指需要處理的數值,是必須填寫的值。

    num_digits:用於指定取整精度的數字,截取時不進行四舍五入。該參數可以不填,不填的時候num_digits 的默認值為 0。

     1.3 to_number(expr [, fmt [, 'nlsparam' ] ]) 轉換數據類型

           expr:如果expr為char、nchar、varchar2,nvarchar2則可以指定格式fmt,如果是binary_float、binary_double則不能指定格式

           nlsparam: 用於數字轉換的TO_CHAR函數中的nlsparam參數具有相同的目的。有關更多信息,請參閱TO_CHAR(nuber)。此功能不直接支持CLOB數據。然而,CLOB可以通過隱式數據轉換作為參數傳入

      1.4 to_date(char [, fmt [, 'nlsparam' ] ]) 將字符轉換為日期格式

            char:需要轉換的字符

   fmt:是一種指定char格式的日期時間模型格式。如果省略FMT,則char必須是默認日期格式。默認日期格式由NLS_Area初始化參數隱式確定,也可以由NLS_DATE_FORCT參數顯式設置。如果fmt是J,對於Julian,char必須是一個整數。

     nlsparam: 指定正在轉換為日期的文本字符串的語言。該參數可以具有以下形式

     1.5 mod(n1,n2) 取余(n1/n2的小數部分)

          n1,n2 都為數字類型 

相差時分秒

第一種

--4天2小時10分 =353405秒

select trunc(353405/(24*60*60)) 天,trunc( mod(353405,24*60*60)/(60*60) ) 時, 
trunc(mod(353405,60*60)/60) 分,trunc(mod(353405,60)) 秒 from dual;
View Code

第二種

兩個日期相減得出一個數字類型

1天2小時5分10秒=1.0869212962963

 select to_date('2020-01-06 14:35:35','yyyy-mm-dd hh24:mi:ss')-
 to_date('2020-01-05 12:30:25','yyyy-mm-dd hh24:mi:ss') from dual;
select trunc(1.0869212962963) 天 ,
             trunc(mod(1.0869212962963, 1) * 24) 時,
             trunc(mod(mod(1.0869212962963, 1) * 24, 1) * 60) 分,
             trunc(mod(mod(mod(1.0869212962963, 1) * 24, 1) * 60,1)*60) 秒
        from dual;

 

 

 

第三種

select startTime, endTime, tday, thour, tminute, round((tt_minute-tminute)*60) as tseconds  
from 
(
  select startTime, endTime, tday, thour, trunc((tt_hour-thour)*60) as tminute, (tt_hour-thour)*60 as tt_minute 
  from 
  (select startTime, endTime, tday, trunc((tt_day-tday)*24) as thour, (tt_day-tday)*24 as tt_hour from 
    (select to_number(endTime - startTime) as tt_day, 
         trunc(to_number(endTime - startTime)) as tday, startTime, endTime from 
     (select to_date('2012-11-01 00:20:31','yyyy-mm-dd hh24:mi:ss') as startTime,sysdate as endTime from dual) 
    )
  )
)
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM