oracle的timestamp型別使用
我們都知道date和timestamp都是對日期和時間的表示,只是兩種型別的精確度不同,前者精確到秒,後者精確到小數秒(fractional_seconds_precision),可以是 0 to 9,預設是6。
但是對date型別的運算很簡單,有很多函式可用來處理;而兩個timestamp的差則是很直觀地顯示為多少天+多少小時+多少分鐘+多少秒+多少小數秒,
SQL> create table test (T1 TIMESTAMP(6),
2 T2 TIMESTAMP(6));
表已建立。
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-01 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff'));
已建立 1 行。
SQL>
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-02 12:20:10.2','yyyy-mm-dd hh24:mi:ss.ff'));
已建立 1 行。
SQL>
SQL> insert into test values(
2 to_timestamp('2006-01-01 12:10:10.1','yyyy-mm-dd hh24:mi:ss.ff'),
3 to_timestamp('2006-01-02 13:40:20.2','yyyy-mm-dd hh24:mi:ss.ff'));
已建立 1 行。
SQL> commit;
提交完成。
SQL>
兩個timestamp的差則是很直觀地顯示為多少天+多少小時+多少分鐘+多少秒+多少小數秒:
SQL> select t2-t1 from test;
+000000000 00:10:00.100000
+000000001 00:10:00.100000
+000000001 01:30:10.100000
SQL>
但要簡單地轉化為某一個精度卻比較麻煩,用類似date型別的處理方法是不行的。如轉化為分:
SQL> select 1440*(t2-t1) from test;
+000000010 00:02:24.000000000
+000001450 00:02:24.000000000
+000001530 04:02:24.000000000
SQL>
發現結果根本不是原先想要的,而是在原先的“多少天+多少小時+多少分鐘+多少秒+多少小數秒”的每一項都乘以1440再進行進位制處理。
最容易理解的就是用substr將兩個timestamp的差進行分割轉化處理:
SQL> SELECT substr((t2-t1),instr((t2-t1),' ')+7,2) seconds,
2 substr((t2-t1),instr((t2-t1),' ')+4,2) minutes,
3 substr((t2-t1),instr((t2-t1),' ')+1,2) hours,
4 trunc(to_number(substr((t2-t1),1,instr(t2-t1,' ')))) days,
5 trunc(to_number(substr((t2-t1),1,instr(t2-t1,' ')))/7) weeks
6 FROM test;
SECO MINU HOUR DAYS WEEKS
---- ---- ---- ---------- ----------
00 10 00 0 0
00 10 00 1 0
10 30 01 1 0
或者利用自定義函式來實現將天數轉換成“天時分秒”格式:
CREATE OR REPLACE FUNCTION F_DAYS2STR(P_DAYS IN NUMBER DEFAULT 0)
RETURN VARCHAR2 IS
--Ver:1.0
--Created by xsb on 2005-05-26
--For: 將天數轉換成天時分秒格式
DAYS NUMBER := NVL(P_DAYS, 0);
VD NUMBER; --天
VH NUMBER; --小時
VM NUMBER; --分
VS NUMBER; --秒
RESULT VARCHAR2(100); --返回值
BEGIN
VD := TRUNC(DAYS);
VH := TRUNC((DAYS - VD) * 24);
VM := TRUNC((DAYS - VD - VH / 24) * 24 * 60);
VS := TRUNC((DAYS - VD - VH / 24 - VM / 24 / 60) * 24 * 60 * 60);
SELECT DECODE(VD, 0, '', VD || '天') || DECODE(VH, 0, '', VH || '小時') ||DECODE(VM, 0, '', VM || '分') || DECODE(VS, 0, '', VS || '秒') INTO RESULT FROM DUAL;
RETURN(RESULT);
END;
SQL>
如果最後結果的精度要求不高時(在分或分以上時),就可以先將timestamp轉化為date再結算,這樣就簡單多了:
SQL> select (to_date(to_char(t2,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'
)-to_date(to_char(t1,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60
2 from test;
10
1450
1530.16667
date轉換為timestamp:
SELECT CAST(sysdate AS TIMESTAMP) from dual;
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017070/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- [20241009]oracle timestamp with time zone資料型別的儲存.txtOracle資料型別
- Oracle中Date和Timestamp的區別Oracle
- mysql 資料型別TIMESTAMPMySQL 資料型別
- MySQL 的 timestamp 和 datetime 型別比較MySql型別
- Oracle TimestampOracle
- Mysql日期(DATE, TIME, DATETIME, TIMESTAMP)型別的比較MySql型別
- ORACLE日期型別Oracle型別
- Oracle的number資料型別Oracle資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- Oracle 資料型別Oracle資料型別
- ORACLE物件型別表Oracle物件型別
- 1.1. Oracle 資料庫使用者型別Oracle資料庫型別
- MySQL中datetime和timestamp的區別MySql
- mysql資料庫時間型別datetime、bigint、timestamp的查詢效率比較MySql資料庫型別
- Oracle DG Standby Database型別OracleDatabase型別
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- Oracle OCP(19):資料型別Oracle資料型別
- oracle數值型別漫談Oracle型別
- Redis Stream型別的使用Redis型別
- 基本資料型別與API引用型別的使用資料型別API
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- Mysql - 如何決定用 datetime、timestamp、int 哪種型別儲存時間戳?MySql型別時間戳
- Oracle字串資料型別簡述Oracle字串資料型別
- Oracle實驗(05):時間型別Oracle型別
- php型別運算子的使用PHP型別
- TIMESTAMP和TIMESTAMP WITH TIME ZONE之間的總結
- Oracle 修改欄位型別和長度Oracle型別
- Oracle和sqlserver資料型別對應OracleSQLServer資料型別
- QXMySQL 中 datetime 和 timestamp 的區別與選擇lypMySql
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- Gradle 使用技巧(三) - dependencies 的型別與區別Gradle型別
- mongoose的date型別和timestamps的使用Go型別
- mysql資料庫date 、datetime、time、timestamp區別MySql資料庫
- Oracle date 型別比較和String比較Oracle型別
- 資料型別與函式索引-Oracle篇資料型別函式索引Oracle