网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  解析:怎样在oracle 9i中正确的转换时区     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:124次  录入:管理员--2007-11-15  
 

很多人都知道,在oracle 9i之前,虽然有一个new_time函数可以改变date的时间戳部分,但是还没有专门用来存储时区信息的数据类型。在oracle9i中,我们可以使用dbtimezone伪字段查询数据库的时区,使用sessiontimezone伪字段查询会话的时区。

但是,对于大多数数据库,这些值都是-07:00之类的偏移值,因此对于new_time函数是没有用的。oracle9i有关new_time的文档建议使用from_tz来替代,但是这可能会产生误导。from_tz只将一个时区应用到一个时间戳上;它并不能把一个时区转换成另外一个时区。

其实有一个比较好的方法(从文档中得到这个方法可能有点难)。首先,为了完成这个工作,在正确的时区内需要一个timestamp with zone数据类型。然后,如果你将关键字at time zone应用到那个值,它就会自动地调整为新的时区和日期。

  select (timestamp '2003-04-06 01:59:59' at time zone 'pdt') 
    at time zone 'gmt'
  from dual;
  
  06-apr-03 08.59.59.00000000 am gmt

这个语句将为太平洋白天时间(即其切换到pst之前的时刻)构造一个timestamp with time zone然后再将其转换到gmt。at time zone关键字也接受默认的偏移值语法:

select (timestamp '2003-04-06 02:00:00' 
at time zone '-07:00') at time zone
'00:00' from dual;
06-apr-03 09.00.00.000000000 am +00:00

你还可以使用伪字段来自动调整当前会话的时区:

selectcurrent_timestamp at time zone dbtimezone from dual;

上面的表达式返回一个当前会话的本地时间(数据类型为时区),重新调整数据库的时区,调整后的时区将与systimestamp的结果相等。

有了以上的这些信息,就可以构造一个比较好的new_time函数:

create or replace function my_new_time
  (
    p_dwtz timestamp with time zone,
    p_tz varchar2
  ) return date
  is
  begin
    return cast(p_dwtz at time zone p_tz as date);
  end my_new_time;
  /
  show errors;
  
  select my_new_time(sysdate,'+08:00') from dual;

如果第一个参数被标记为一个timestamp with time zone,你可以传入一个timestamp和date,这样由于oracle的自动转型操作,得到的时间将是会话在本地时区的当前时间。这个函数接受包括偏移值在内的任何可以被timestamp识别的时区,然后将接受的时区调整为正确的值。

 
 
上一篇: 教你快速掌握oracle 9i数据库的移动过程    下一篇: 细化解析:时间再次停止运行的解决方法
  相关文档
Oracle数据库密码文件的使用和维护 01-15
Oracle数据库如何查询记录时给记录加锁 06-10
教你手工创建数据库的全部脚本及说明 05-13
用Oracle动态性能视图采集查询调优数 04-23
详细讲解有关"cbo"优化的三个疑难问题 02-03
用quick slice获取oracle进程的线程状态 07-07
oracle最强有力的辅助诊断工具sql_trace (1) 04-30
windows平台下"one-of-patch"的安装方法 03-05
浅析Oracle数据库的最大可用性体系结构 07-07
详细讲解oracle物理结构故障的处理方法 (1) 05-15
相同软件环境下oracle9i数据库迁移方法 05-14
细化解析如何共享Oracle数据库身份空间 09-01
Oracle数据库中利用ASSM改善分段存储 04-12
解决表空间填充满时出现的ora-1652错误 (1) 04-16
通过SQL定时分析表监控Unix系统性能 04-11
Oracle中通过命令行实现定时操作详解 04-11
如何为用户提供回滚操作时间的准确评估 01-29
为什么oracle有时会用索引来查找数据? 11-15
轻松解决:Oracle8i回滚段表空间的坏块 08-05
一些可以预见的oracle应用程序性能调优 (1) 03-31
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息