TIMESTAMP Data Type
The TIMESTAMP
data type is an extension of the DATE
data type. It stores the year, month, and day of the DATE
data type, plus hour, minute, and second values. This data type is useful for storing precise time values and for collecting and evaluating date information across geographic regions. Specify the TIMESTAMP
data type as follows:
TIMESTAMP [(fractional_seconds_precision)]
timestamp類型是date類型的一個擴展,date類型會存儲年月日時分秒信息,timestamp類型精度更高,會存儲到微秒、納秒。
SQL> create table t (id number,col1 date,col2 timestamp,col3 timestamp(9));
Table created.
SQL> set long 10000
SQL> select dbms_metadata.get_ddl('TABLE','T','SCOTT') from dual;DBMS_METADATA.GET_DDL('TABLE','T','SCOTT')
--------------------------------------------------------------------------------CREATE TABLE "SCOTT"."T"
( "ID" NUMBER,
"COL1" DATE,
"COL2" TIMESTAMP (6),
"COL3" TIMESTAMP (9)
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "USERS"
SQL> insert into t values(1,sysdate,sysdate,sysdate);
1 row created.
SQL> select * from t;
ID COL1 COL2 COL3
---------- -------------------- ------------------------------ --------------------------------
1 2022-03-29 18:40:24 29-MAR-22 06.40.24.000000 PM 29-MAR-22 06.40.24.000000000 PM
可以看出,timestamp類型默認存儲到微秒,指定精度timestamp(9) 時可以存儲到納秒。
SQL> select column_name,data_type,data_length,data_precision,data_scale from user_tab_cols where table_name='T';
timestamp(6), timestamp(9) 都會占用11個bytes,date占7個bytes,所以精度只要求到秒的,date類型就可以,比timestamp類型節省空間。
另外oracle可以為date類型或timestamp類型指定默認值 sysdate
alter table t modify col1 default sysdate; #修改某date列的默認值為sysdate。 修改以前的歷史數據不會改變。
或者
alter table t add col4 date default sysdate; #增加一列,並指定默認值sysdate。