Oracle中date與timestamp的異同

2021-07-23 20:08:10 字數 2858 閱讀 4511

在oracle中儲存date和時間資訊的話,實際上你有兩種字段資料型別的選擇(9i)。

date資料型別

可以儲存月,年,日,世紀,時,分和秒。度量粒度是秒

以使用to_char函式把date資料進行傳統地包裝,達到表示成多種格式的目的

select to_char(sysdate,'mm/dd/yyyy hh24:mi:ss') "date" from dual

大多數人陷入的麻煩就是計算兩個時間間的間隔年數、月數、天數、小時數和秒數。你需要明白的是,當你進行兩個日期的相減運算的時候,得到的是「帶小數字的天數」。

可以通過乙個函式將天數轉換成「天時分秒」格式:

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;

timestamp 資料型別

它包括了所有date資料型別的年月日時分秒的資訊,而且包括了小數秒的資訊。

select sysdate,systimestamp from dual

注意,to_char函式支援date和timestamp,但是trunc卻不支援timestamp資料型別。

select sysdate,systimestamp,to_char(systimestamp,'yyyymmdd hh24:mi:ssxff3')fromdual

當你直接相減的話,看看會發生什麼。結果將更容易理解,

selectsystimestamp-systimestampfromdual

這就意味著不用再通過麻煩的計算求出多少天多少秒,用substr函式摘取出其中的數字即可!

結論:當使用date和timestamp型別的時候,選擇是很清楚的。你可以隨意處置date和timestamp型別。當你的時間粒度必須精確至秒以下時,可以考慮使用timestamp。

再來看如何實現:將天數轉換成「天時分秒」格式:

使用date資料型別:

createtablet2 (d1date,d2date) ;

insert intot2values(sysdate,sysdate

1.1234

);selectd1, d2, d2 - d1, f_days2str(d2 - d1),

cast(d2as timestamp) -cast(d1as timestamp)

fromt2

selectto_number(substr(d21, 

1, instr(d21, 

' '))) d,

substr(d21, instr(d21, 

' ') + 1, 

2) h,

substr(d21, instr(d21, 

' ') + 4, 

2) m,

substr(d21, instr(d21, 

' ') + 7, 

2) s

from(select cast(d2as timestamp) -cast(d1as timestamp) d21

fromt2)

原文連線:

Oracle中的date與timestamp的區別

在oracle中儲存date和時間資訊的話,實際上你有兩種字段資料型別的選擇 9i date資料型別 可以儲存月,年,日,世紀,時,分和秒。度量粒度是秒 以使用to char函式把date資料進行傳統地包裝,達到表示成多種格式的目的 select to char sysdate,mm dd yyyy...

Oracle中插入Date資料

oracle中插入date資料 錯誤的 insert into table j values 2000 11 26 00 04 47 在oracle中建有date型別的字段,插入可以採取如下方法 如果是小時為 12 採取如下格式 yyyy mm dd hh mi ss insert into tes...

oracle中date和timestamp的區別

如果你想在oracle中儲存date和時間資訊的話,實際上你由兩種字段資料型別的選擇的話,就讓我們看看這兩種資料型別的差別和它們提供了些什麼。date資料型別 這個資料型別我們實在是太熟悉了,當我們需要表示日期和時間的話都會想到date型別。它可以儲存月,年,日,世紀,時,分和秒。它典型地用來表示什...