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

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

对于公元前的日期 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= : b b fc c Typ= Len= : b b fc c Typ= Len= : b b fc c c c

可以发现 如果客户端和数据库中的时区是一致的 那么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>MIT

提交完成

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

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= : b b fc c Typ= Len= : b b fc c Typ= Len= : b b fc c c c

Typ= Len= : b c c c e Typ= Len= : b c c c e Typ= Len= : b c c c e c

Typ= Len= : b b f a d c c Typ= Len= : b f a d c c Typ= Len= : b f a d c c f c

Typ= Len= : b b a f Typ= Len= : b b a f Typ= Len= : b b a f c

Typ= Len= : c f d Typ= Len= : b f d Typ= Len= : b f d c

Typ= Len= : b f cb bb c Typ= Len= : c e cb bb c Typ= Len= : b e cb bb c e

Typ= Len= : c b b Typ= Len= : c f b b Typ= Len= : b f b b d a

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

TO_NUMBER( C XXX ) TO_NUMBER( C XXX )

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

TO_NUMBER( XXX ) TO_NUMBER( C XXX )

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

TO_NUMBER( C XXX ) TO_NUMBER( E XXX ) TO_NUMBER( A XXX )

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

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

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

lishixinzhi/Article/program/Oracle/201311/18690

可以

oracle数据库建表date,Oracle数据库中关于日期和时间字段类型 转载

2021-04-02 21:03:04

GUlijiwa古力

码龄4年

关注

Oracle数据库

与日期有关的有三种类型:date,timestamp与interval。DATE和TIMESTAMP类型存储精度可变的固定日期/时间,二者区别是,后者秒可以精确到小数,另外还可以有时区之分。。INTERVAL类型可以很容易地存储一个时间量,如“8个小时”或“30天”。将两个日期相减,就会得到一个时间间隔(INTERVAL);例如,将8小时间隔加到一个TIMESTAMP上,会得到8小时以后的一个新的TIMESTAMP。

*** 作日期有关字段的时候,最好显示地指定日期或时间格式,比如:

Insert into t ( date_column ) values ( to_date( '01/02/2003', 'DD/MM/YYYY' ) )避免各种格式造成混乱。

1. DATE类型介绍

DATE类型是一个7字节的定宽日期/时间数据类型。它总是包含7个属性,包括:世纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。这七个字节分别存储的是这7个属性,比如:2005-12-05 12:30:43存储的是120,105,12,5,12,31,44。世纪和年份分别加了100,分钟和秒钟分别加了1。世纪和年份加100是为了区分公元前和公元后。我们经常使用这样的条件,Where to_char(date_column,'yyyy') = '2005',其实这个地方可以换成:Where trunc(date_column,'y') = to_date('01-jan-2005','dd-mon-yyyy')。因为,trunc函数是在日期上将年份后面5个字节清空,而to_char函数,还要转换成字符串。当然,如果能够不使用函数最好,比如:created >= to_date('01-jan-2005','dd-mon-yyyy') and created <to_date('01-jan-2006','dd-mon-yyyy')这样如果在created列上建立了索引,还能使用索引。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9977133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存