將TIMESTAMP型別的差值轉化為秒的方法
兩個TIMESTAMP之差得到的是INTERVAL型別,而有時我們只需要得到兩個時間相差的秒數,如果變成INTERVAL之後,想要獲取這個值會非常麻煩。
比較常見的方法是使用EXTRACT來抽取獲得的INTERVAL型別的日、時、分和秒來分別計算並求和:
SQL> create table t_timestamp (id number, t1 timestamp, t2 timestamp);
Table created.
SQL> insert into t_timestamp
2 values (1, to_timestamp('20120603222324', 'yyyymmddhh24miss'),
to_timestamp('20120526152354', 'yyyymmddhh24miss'));
1 row created.
SQL> commit;
Commit complete.
SQL> select t1 - t2 from t_timestamp where id = 1;
T1-T2
---------------------------------------------------------------------------
+000000008 06:59:30.000000
SQL> with t as (select t1 - t2
interval from t_timestamp where id = 1)
2 select extract(day from interval) * 86400
3 + extract(hour from interval) * 3600
4 + extract(minute from interval) * 60
5 + extract(second from interval) interval
6 from t;
INTERVAL
----------
716370
對於不需要考慮毫秒的情況而言,這種計算過於麻煩了,而對於DATE型別而言,計算差值非常方便,直接就可以返回兩個日期相差的天數,在乘以86400就可以得到結果。
可惜的是,無論是ROUND還是TRUNC引數,都不支援TIMESTAMP型別:
SQL> select trunc(t1, 'ss') from
t_timestamp where id = 1;
select trunc(t1, 'ss') from t_timestamp where id = 1
*
ERROR at line 1:
ORA-01899: bad precision specifier
SQL> select round(t1, 'ss') from t_timestamp where id = 1;
select round(t1, 'ss') from t_timestamp where id = 1
*
ERROR at line 1:
ORA-01899: bad precision specifier
其實對於這個問題,最簡單的方法是利用隱式轉換,變成DATE型別的操作:
SQL> select (t1 - 0 - (t2 - 0)) * 86400 from t_timestamp;
(T1-0-(T2-0))*86400
-------------------
716370
當然最標準的方法還是顯示的轉換:
SQL> select (cast(t1 as date) - cast(t2 as date)) * 86400 from t_timestamp;
(CAST(T1ASDATE)-CAST(T2ASDATE))*86400
-------------------------------------
716370
顯然這種方便比利用EXTRACT要簡單得多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-732366/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 將timestamp型別轉換為date型別型別
- oracle資料型別date和timestamp的轉化Oracle資料型別
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- Oracle timestamp型別轉換date格式指令碼(精確到秒)Oracle型別指令碼
- Rust中將陣列轉為集合型別的簡單方法Rust陣列型別
- Sybase的timestamp型別型別
- C#中將DataTable型別轉化為泛型集合C#型別泛型
- 將sql中的money轉化為c#中的資料型別SQLC#資料型別
- date和timestamp型別之間的轉換型別
- oracle的timestamp型別使用Oracle型別
- TIMESTAMP型別的時區型別
- Oracle中的TIMESTAMP型別Oracle型別
- Java中將時間戳轉化為Date型別Java時間戳型別
- 將檔案轉化為字串的方法字串
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- Oracle中的TIMESTAMP資料型別Oracle資料型別
- timestamp型別的加減運算型別
- ORACLE DATE和TIMESTAMP資料型別的比較(一) (轉)Oracle資料型別
- ORACLE DATE和TIMESTAMP資料型別的比較(二) (轉)Oracle資料型別
- Sybase datetime型別對映為Oracle timestamp型別Oracle
- 輸入TIMESTAMP型別型別
- Timestamp型別淺析型別
- Toad 與 timestamp 型別的問題?型別
- 第11章 使用類——型別轉換(二)將自定義型別轉換為內建型別型別
- js將秒轉換為時分秒JS
- (轉)PLS_INTEGER型別與timestamp型別、date、及時間函式型別函式
- 把jason字串轉化為標註的data(responseObject)型別字串Object型別
- 行轉列計算差值的一種優化優化
- oracle timestamp轉換date及date型別相減Oracle型別
- 如何在 Go 中將 int 型別轉為字串Go型別字串
- mysql 資料型別TIMESTAMPMySQL 資料型別
- date、timestamp欄位型別型別
- Sqlserver:timestamp資料型別SQLServer資料型別
- ORACLE TIMESTAMP資料型別Oracle資料型別
- timestamp資料型別求差資料型別
- 將timestamp轉成date格式的指令碼指令碼
- MySQL 的 timestamp 和 datetime 型別比較MySql型別