原著作者:james koopmann
timestamp數據的格式化顯示和date 數據一樣。注意,to_char函數支持date和timestamp,但是trunc卻不支持timestamp數據類型。這已經清楚表明了在當兩個時間的差別極度重要的情況下,使用timestamp數據類型要比date數據類型更確切。
如果你想顯示timestamp的小數秒信息,參考下面:
1 select to_char(time1,'mm/dd/yyyy hh24:mi:ss:ff3') "date" from date_table
date
-----------------------
06/20/2003 16:55:14:000
06/26/2003 11:16:36:000
在上例中,我只現實了小數點后3位的內容。
計算timestamp間的數據差別要比老的date數據類型更容易。當你直接相減的話,看看會發生什么。結果將更容易理解,第一行的17天,18小時,27分鐘和43秒。
1 select time1,
2 time2,
3 substr((time2-time1),instr((time2-time1),' ')+7,2) seconds,
4 substr((time2-time1),instr((time2-time1),' ')+4,2) minutes,
5 substr((time2-time1),instr((time2-time1),' ')+1,2) hours,
6 trunc(to_number(substr((time2-time1),1,instr(time2-time1,' ')))) days,
7 trunc(to_number(substr((time2-time1),1,instr(time2-time1,' ')))/7) weeks
8* from date_table
time1 time2 seconds minutes hours days weeks
------------------------- -------------------------- ------- ------- ----- ---- -----
06/20/2003:16:55:14:000000 07/08/2003:11:22:57:000000 43 27 18 17 2
06/26/2003:11:16:36:000000 07/08/2003:11:22:57:000000 21 06 00 12 1
這就意味著不再需要關心一天有多少秒在麻煩的計算中。因此,得到天數、月數、天數、時數、分鐘數和秒數就成為用substr函數摘取出數字的事情了。
系統日期和時間
為了得到系統時間,返回成date數據類型。你可以使用sysdate函數。
sql> select sysdate from dual;
為了得到系統時間,返回成timestamp數據類型。你可以使用systimpstamp函數。
sql> select systimestamp from dual;
你可以設置初始化參數fixed_date指定sysdate函數返回一個固定值。這用在測試日期和時間敏感的代碼。注意,這個參數對于systimestamp函數無效。
sql> alter system set fixed_date = '2003-01-01-10:00:00';
system altered.
sql> select sysdate from dual;
sysdate
---------
01-jan-03
sql> select systimestamp from dual;
systimestamp
---------------------------------------------------------
09-jul-03 11.05.02.519000 am -06:00
當使用date和timestamp類型的時候,選擇是很清楚的。你可以隨意處置date和timestamp類型。當你試圖轉換到更強大的timestamp的時候,需要注意,它們既有類似的地方,更有不同的地方,而足以造成破壞。兩者在簡潔和間隔尺寸方面各有優勢,請合理地選擇。