今天在修復bug時,計算時間差有的正確,有的不正確,最後找到原來是trunc的原因
在Oracle中,日期格式時刻意相加減的
兩個日期相減,默認就是天數days;
days*24即爲相差小時數;
days*24*60即爲相差分鐘數;
days*24*60*60即爲秒數;
不用再刻意轉換、取整等,Oracle會自動保留小數位或者自動截取轉換
特別是取秒數時,使用trunc截取可能會適得其反,trunc截取時默認是不會四捨五入的,例如:
SQL> select (to_date('2015-11-18 18:55:58','yyyy-mm-dd hh24-mi-ss')-to_date('2015-11-18 18:55:11','yyyy-mm-dd hh24-mi-ss'))*24*60*60 secs from dual;
SECS
----------
47
SQL> select trunc((to_date('2015-11-18 18:55:58','yyyy-mm-dd hh24-mi-ss')-to_date('2015-11-18 18:55:11','yyyy-mm-dd hh24-mi-ss'))*24*60*60)
secs from dual;
SECS
----------
46
需要指出的是,如果爲trunc指定保留位數,當然可以,
SQL> select trunc((to_date('2015-11-18 18:55:58','yyyy-mm-dd hh24-mi-ss')-to_date('2015-11-18 18:55:11','yyyy-mm-dd hh24-mi-ss'))*24*60*60,2)
secs from dual;
SECS
----------
46.99
只要業務上對秒數沒有整數的要求都ok哈