Oracle数据库时区

    对于全球化的业务而言,业务必须在多个时区之间正常运转。从9i版本开始,Oracle环境能够知道所使用时区。为了实现这个功能,需要指定数据库所运行的时区以及使用TIMESTAMP WITH TIME ZONE与TIMESTAMP WITH LOCAL TIME ZONE数据类型。前一种具有一个时区指示符,这个指示符说明了其引用的时区。后一种数据类型在存储时会被规范化为数据库时区,但随后在检索时会转换为客户端的时区。 普通的DATE和TIMESTAMP数据类型在存储时始终会规范为数据库时区,并且会在查询过程原样显示。
 关于timestamp的几个函数:
 sysdate     数据库服务器操作系统时间,显示不含时区(其实隐含了时区)。
 systimestamp 数据库服务器操作系统时间以及时区
  注意上述两个函数的返回值不会受到客户端影响。

 localtimestamp      根据客户端时区转换成客户端当前时间,但显示并不含时区
 current_timestamp 根据客户端时区转换成客户端当前时间,包含客户端时区
 注意上述两个函数的返回值和客户端时区设置有关,会转换为客户端时区的时间。

【实验一】
数据库服务器操作系统时间及时区:
linux-qtx3:~ # date -R
Thu, 30 Mar 2017 07:18:52 -0400

1.客户端在东8区的情况:

分别查询sysdate,systeimstamp,localtimestamp以及current_timestamp

命令

输出

select sysdate from dual;

2017/3/30 7:22:47

select systimestamp from dual;

30-MAR-17 07.22.56.731121 AM -04:00

select localtimestamp from dual;

30-MAR-17 07.23.06.814472 PM

select current_timestamp from dual;

30-MAR-17 07.23.14.907555 PM +08:00


2.将客户端修改为东7区:

再次执行上述命令:

命令

输出

select sysdate from dual;

2017/3/30 7:31:27

select systimestamp from dual;

30-MAR-17 07.32.41.710320 AM -04:00

select localtimestamp from dual;

30-MAR-17 06.33.00.222382 PM

select current_timestamp from dual;

30-MAR-17 06.33.14.242552 PM +07:00


3.修改数据库服务器时间为3月29日
linux-qtx3:~ # date -R
Wed, 29 Mar 2017 03:00:02 -0400
接着按照步骤2中TIME_ZONE='+7:00'设置执行命令:

命令

输出

select sysdate from dual;

2017/3/29 3:00:49

select systimestamp from dual;

29-MAR-17 03.00.59.413491 AM -04:00

select localtimestamp from dual;

29-MAR-17 02.01.08.518988 PM

select current_timestamp from dual;

select current_timestamp from dual;


【实验二】

点击(此处)折叠或打开

  1. CREATE TABLE T(ID number(2),time_tz timestamp with time zone,time_lc_tz timestamp with local time zone);
  2. select sessiontimezone from dual;

  3. SESSIONTIMEZONE
  4. ---------------------------------------------------------------------------
  5. -04:00

  6. insert into t values(1,to_timestamp('2017-03-30 11:09:00','YYYY-MM-DD HH24:MI:SS'),to_timestamp('2017-03-30 11:09:00','YYYY-MM-DD HH24:MI:SS'));
  7. commit;
在西四区的客户端上向表t插入上述数据,在东七区客户端查询结果会是什么样呢?

点击(此处)折叠或打开

  1. SELECT sessiontimezone FROM dual;
     
    SESSIONTIMEZONE
    ---------------------------------------------------------------------------
    +07:00

  2. SELECT * FROM t;
  3.  
  4.  ID TIME_TZ                                TIME_LC_TZ
  5. --- -----------------------------------------------------------------------------
  6.   1 30-MAR-17 11.09.00.000000 AM -04:00    30-MAR-17 10.09.00.000000 PM
可以看到对于time zone类型的数据,由于已经带了时区信息,无论在哪个时区的客户端查询都是一样的;对于local time zone类型的数据,由于插入的时候是A时区的时间信息,到B时区的 客户端查询就应该进行相应的转换。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29827284/viewspace-2136445/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29827284/viewspace-2136445/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值