对于公元前的日期 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
Mysql中经常用来存储日期的数据类型有三种:Date、Datetime、Timestamp。
【1】Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
【2】Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
【3】Timestamp类型:也是存储既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。
扩展资料
切记不要用字符串存储日期
这种存储日期的方式的优点还是有的,就是简单直白,容易上手。但是,这是不正确的做法,主要会有下面两个问题:
1、字符串占用的空间更大。
2、字符串存储的日期比较效率比较低(逐个字符进行比对),无法用日期相关的 API 进行计算和比较。
DateTime 类型没有时区信息的
DateTime 类型是没有时区信息的(时区无关) ,DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。
当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。不要小看这个问题,很多系统就是因为这个问题闹出了很多笑话。
Timestamp 和时区有关。Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)