数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle基本数据类型存储格式浅析—日期类型(3)


发布日期:2020年11月26日
 
Oracle基本数据类型存储格式浅析—日期类型(3)

对于公元前的日期Oracle从开始保存公元前的年的保存的值和对应的公元后的年的值相加的和是如上例中的公元年和公元前年的值相加+=+=

SQL中DATE类型最后还包括一个似乎目前没有使用

SQL> CREATE TABLE TEST_TIMESTAMP(TIME TIMESTAMP() TIME TIMESTAMP() WITH LOCAL TIME ZONE

TIME TIMESTAMP() WITH TIME ZONE);

表已创建

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

SQL> SELECT * FROM TEST_TIMESTAMP;

TIME

TIME

TIME

下午

下午

下午 +:

SQL> SELECT DUMP(TIME ) DUMP(TIME ) DUMP(TIME ) FROM TEST_TIMESTAMP;

DUMP(TIME)

DUMP(TIME)

DUMP(TIME)

Typ= Len=: bbfcc

Typ= Len=: bbfcc

Typ= Len=: bbfcccc

可以发现如果客户端和数据库中的时区是一致的那么TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE存储的数据是完全一样的

TIMESTAMP WITH TIME ZONE则略有不同它保存的是时区的时间和所处的时区信息

修改客户端主机的时区由东区(+区)改为时区

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

修改客户端主机的时区改为西区(时区)

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

修改客户端主机的时区改为西区(时区)

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

修改客户端主机的时区改为东区(+时区)

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

修改客户端主机的时区改为西区(时区)

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

修改客户端主机的时区改为东区(+时区)

SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

已创建

SQL> COMMIT;

提交完成

修改客户端主机的时区改回东区(+时区)

SQL> SELECT * FROM TEST_TIMESTAMP;

TIME

TIME

TIME

下午

下午

下午 +:

下午

下午

下午 +:

上午

下午

上午 :

上午

下午

上午 :

上午

下午

上午 +:

下午

上午

下午 :

上午

上午

上午 +:

已选择

SQL> SELECT DUMP(TIME ) DUMP(TIME ) DUMP(TIME ) FROM TEST_TIMESTAMP;

DUMP(TIME)

DUMP(TIME)

DUMP(TIME)

Typ= Len=: bbfcc

Typ= Len=: bbfcc

Typ= Len=: bbfcccc

Typ= Len=: bccce

Typ= Len=: bccce

Typ= Len=: bcccec

Typ= Len=: bbfadcc

Typ= Len=: bfadcc

Typ= Len=: bfadccfc

Typ= Len=: bbaf

Typ= Len=: bbaf

Typ= Len=: bbafc

Typ= Len=: cfd

Typ= Len=: bfd

Typ= Len=: bfdc

Typ= Len=: bfcbbbc

Typ= Len=: cecbbbc

Typ= Len=: becbbbce

Typ= Len=: cbb

Typ= Len=: cfbb

Typ= Len=: bfbbda

SQL> SELECT TO_NUMBER(C XXX) TO_NUMBER(C XXX) FROM DUAL;

TO_NUMBER(CXXX) TO_NUMBER(CXXX)

SQL> SELECT TO_NUMBER( XXX) TO_NUMBER(C XXX) TO_NUMBER(C XXXXXXX) FROM DUAL;

TO_NUMBER(XXX) TO_NUMBER(CXXX)

SQL> SELECT TO_NUMBER(C XXX) TO_NUMBER(E XXX) TO_NUMBER(A XXX) FROM DUAL;

TO_NUMBER(CXXX) TO_NUMBER(EXXX) TO_NUMBER(AXXX)

可以看出修改时区会导致系统TIMESTAMP时间发生变化但是对于TIMESTAMP WITH LOCAL TIME ZONE类型总是将系统的时间转化到数据库服务器上时区的时间进行存储

TIMESTAMP WITH TIME ZONE保存的是当前时间转化到时区的对应的时间并通过最后两位来保存时区信息

第一位表示时区的小时部分时区用x表示东n区在这个基础上加n西n区在这个基础上减n我们所处的东区表示为xC西区表示为xF

第二位表示时区的分钟部分标准是xC分钟对于东时区的半区在这个基础上加上分钟如果是西时区则减去分钟

上一篇:Oracle数据库导入配置OEM

下一篇:详细介绍Oracle数据库的聚簇技术