Oracle中的TIMESTAMP資料型別

season0891發表於2012-06-25

timestamp格式表示的時間如何轉換成普通格式:

SQL>   SELECT   to_char(tp,'dd-mm-yyyy   hh24:mi:ss.ff')   FROM   TIMESTAMPTEST;

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

java.sql.Timestamp 和 java.sql.Date互相轉換:

 

java.sql.Date---&gtjava.sql.Timestamp
new java.sql.Timestamp(yourDate.getTime());

java.sql.Timestamp--&gtjava.sql.Date
new java.sql.Date(yourTimestamp.getTime());

介面要顯示毫秒的話,在date傳到前面時轉化格式即可! 

 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

TIMESTAMP 資料型別,是DATE的擴充套件,可以儲存年、月、日、小時 、分鐘、秒,同時還可以儲存秒的小數部分。

語法為:TIMESTAMP [(fractional_seconds_precision)]

fractional_seconds_precision為可選項,指定秒的小數部分的精度,取值範圍為0-9,預設值為6。

示例程式碼:

declare
v_inteval timestamp (7);
begin
v_inteval := TIMESTAMP '2007-05-05 23:34:45.1234567';                  
dbms_output.put_line(v_inteval);
end;

結果為:05-5月 -07 11.34.45.1234567 下午。

說明:如果精度為5,則結果為05-5月 -07 11.34.45.12346 下午;如果精度為8,則結果為05-5月 -07 11.34.45.12345670 下午。

二、TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE資料型別是可以指定時區的TIMESTAMP 。時區的偏移是指本地時間和格林尼治(UTC)時間之間的差異(小時 和分鐘)。

語法為:TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

fractional_seconds_precision為可選項,指定秒的小數部分的精度,取值範圍為0-9,預設值為6。

如果2個TIMESTAMP WITH TIME ZONE,相對於UTC代表相同的時間,則認為這2個TIMESTAMP WITH TIME ZONE是相等的,而不管這2個TIMESTAMP WITH TIME ZONE所代表的具體時間,例如:TIMESTAMP '1999-04-15 8:00:00 -8:00'和TIMESTAMP '1999-04-15 11:00:00 -5:00'是相等的,雖然他們分別表示當地的8點和11點,其中-8:00以及-5:00,表示相對UTC的偏移量。

在上例中,也可以將偏移量替換成時區地區(TRZ,time zone region),例如,上例中的TIMESTAMP '1999-04-15 8:00:00 -8:00',與TIMESTAMP '1999-04-15 8:00:00 US/Pacific'是相等的。

為了削除因為夏令時引起的時間歧義,同時使用TRZ,以及和TRZ相對應的TRD來確保返回正確的時間,例如:TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT'。如果沒有使用TZD元素,並且ORACLE 的ERROR_ON_OVERLAP_TIME session引數設定為TRUE,則ORACLE 會返回錯誤。如果ERROR_ON_OVERLAP_TIME session引數設定為FALSE,則ORACLE 認為該TIMESTAMP WITH TIME ZONE為標準時間。

程式碼一:

declare
v_inteval timestamp (7) with time zone;
begin
v_inteval := TIMESTAMP '2007-05-05 23:34:45.1234567';                  
dbms_output.put_line(v_inteval);
end;

結果為:05-5月 -07 11.34.45.123456700 下午 +08:00。

說明:該結果與(一)中的程式碼結果相比,多了一個時區偏移量+08:00,說明該時間為北京時間。

程式碼二:

declare
v_inteval_1 timestamp (3) with time zone;

  v_inteval_2 timestamp (3) with time zone;
begin
v_inteval_1 := TIMESTAMP '1999-04-15 8:00:00 -8:00';
  v_inteval_2 := TIMESTAMP '1999-04-15 11:00:00 -5:00';
  if(v_inteval_1=v_inteval_2)  then            
  dbms_output.put_line('v_inteval_1=v_inteval_2');
  else
   dbms_output.put_line('v_inteval_1!=v_inteval_2');
  end if;
end;

結果為:v_inteval_1=v_inteval_2。

三、TIMESTAMP WITH  LOCAL TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE資料型別也是可以指定時區的TIMESTAMP ,和TIMESTAMP WITH TIME ZONE不同的是,他儲存的是資料庫的時區,時區偏移量並不儲存。當使用者提交資料,ORACLE 返回的是使用者的本地所在的時區。時區的偏移是指本地時間和格林尼治(UTC)時間之間的差異(小時 和分鐘)。TIMESTAMP WITH LOCAL TIME ZONE主要用於CS二層系統應用。

語法:TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

以上程式碼的執行環境:oracle9.2,pl/sql developer

come from:http://cai555.iteye.com/blog/460008

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-733707/,如需轉載,請註明出處,否則將追究法律責任。

相關文章