TIMESTAMP的时区转换

 
   | |

导读:本文侧重介绍TIMESTAMP的时区转换问题,即将一个时区的时间转换到另一个数区的问题。

关键词:Oracle Oracle设计 TIMESTAMP 时区转换

正在加载数据...

TIMESTAMP既然包括了时区的概念,就会碰到将一个时区的时间转换到另一个数区的问题。

在时区转换之前,首先描述一下如何指定一个包含时区的TIMESTAMP,常用方法有以下几种:


SQL> SELECT SYSTIMESTAMP FROM DUAL;
SYSTIMESTAMP
-------------------------------------------------------------------
09-3月 -09 05.37.29.468000 下午 +08:00
SQL> SELECT SYSTIMESTAMP + INTERVAL '5' HOUR FROM DUAL;
SYSTIMESTAMP+INTERVAL'5'HOUR
-------------------------------------------------------------------
09-3月 -09 10.38.02.000000000 下午 +08:00

对于服务器当前时区的时间,可以通过SYSTIMESTAMP加减INTERVAL的方式实现。

第二种方法使用TO_TIMESTAMP_TZ:


SQL> SELECT TO_TIMESTAMP_TZ('2009-3-9 17:51:23.23 -05:00', 
2 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
3 FROM DUAL;
TO_TIMESTAMP_TZ('2009-3-917:51:23.23-05:00','YYYY-MM-DDHH24:MI:SS.FFTZH:TZM
---------------------------------------------------------------------------
09-3月 -09 05.51.23.230000000 下午 -05:00

Oracle还提供一个FROM_TZ的函数,用来转换一个TIMESTAMP类型到TIMESTAMP WITH TIME ZONE类型:


SQL> SELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), '-11:00') 
2 FROM DUAL;
FROM_TZ(CAST(SYSDATEASTIMESTAMP),'-11:00')
--------------------------------------------------------------
09-3月 -09 05.44.18.000000 下午 -11:00

当然还可以通过TIMESTAMP加字符串的方式来直接指定一个包含时区的TIMESTAMP类型:


SQL> SELECT TIMESTAMP '2009-3-9 17:56:53.232323 +10:00'
2 FROM DUAL;
TIMESTAMP'2009-3-917:56:53.232323+10:00'
----------------------------------------------------------
09-3月 -09 05.56.53.232323000 下午 +10:00

最后可以使用TIMESTAMP AT TIME ZONE的方式指定时区:


SQL> SELECT TIMESTAMP '2009-3-9 17:56:53.232323' 
2 AT TIME ZONE 'GMT'
3 FROM DUAL;
TIMESTAMP'2009-3-917:56:53.232323'ATTIMEZONE'GMT'
-----------------------------------------------------
09-3月 -09 09.56.53.232323000 上午 GMT
SQL> SELECT TO_CHAR(
2 TIMESTAMP '2009-3-9 17:56:53.232323'
3 AT TIME ZONE 'GMT'
4 , 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
5 FROM DUAL;
TO_CHAR(TIMESTAMP'2009-3-917:56:53.2
------------------------------------
2009-03-09 09:56:53.232323000 +00:00

而Oracle的最后这种方式,不仅支持时区名称方式,而且支持时区的转换。比如希望将东4区时间转换为西3区的时间:


SQL> SELECT TIMESTAMP '2009-3-9 18:05:23.234 +04:00' 
2 AT TIME ZONE '-03:00'
3 FROM DUAL;
TIMESTAMP'2009-3-918:05:23.234+04:00'ATTIMEZONE'-03:00'
---------------------------------------------------------------------
09-3月 -09 11.05.23.234000000 上午 -03:00
SQL> SELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), 'Asia/Shanghai')
2 AT TIME ZONE 'GMT'
3 FROM DUAL;
FROM_TZ(CAST(SYSDATEASTIMESTAMP),'ASIA/SHANGHAI')ATTIMEZONE'GMT'
---------------------------------------------------------------------

原文出处:http://space.itpub.net/batch.viewlink.php?itemid=369993
 
来源:BLOG    作者:杨廷琨    
 
 
 
 
 

Oracle可用性

 
Oracle公司的这种虚拟化授权策略与其它厂家如BEA或微软相比,是不太友好的。这些公司的虚拟化软件授权针对单个实例,而非每个物理服务器。
 
所有的数据库,不管是物理的还是逻辑的,都必须首先被创建为物理备用数据库。用来创建备用数据库的工具有:RMAN,数据卫士代理,Oracle网格控制。
 
设置数据卫士为不同的模式,有不同的配置,这需要适合硬件,也取决于可用的硬件,进程和最终业务需要。
 
数据卫士在Oracle 8i版本就以某种形式存在了;然而,通过11g中的二级数据库,可以在它处于以读取方式打开的情况下执行恢复。
 
我们可以通过Oracle企业管理器来管理自动存储管理实例,同时我们也可以在SqlPlus和ASMCMD(自动存储管理的命令行管理工具)中使用命令行来管理。

热门技术手册排行

 

在本次的技术手册中,我们为您提供了PL/SQL的基础知识以及专家指导,包括了PL/SQL中的数据类型简介、PL/SQL函数与触发器以及PL/SQL中的存储过程等,相信您无论是高手还是菜鸟都可以获得有帮助的信息。

 

本系列文章由三部分组成,为Oracle数据库管理员(DBA)面试成功的必备手册。本专题内容囊括从DBA最初的面试开始,从写“杀手简历”到求职信、到面试过程到Oracle认证再到上升到公司高层最后到你成为公司里的明星DBA。专家为你一一指点迷津,最终让你登上成功的宝座。

 

要成为一名DBA,你需要具备哪些素质?DBA的薪酬待遇如何?DBA的职业道路究竟可以走向何方?我们将在本次的技术手册中为您一一解答。

 

在本次技术手册中,我们将对SQL Server存储过程的调试进行详细的介绍,包括了基础的调试方法和在调试过程中出现的T-SQL性能问题和解决方法。

 

本技术专题主要围绕sql server设计这个话题展开,侧重介绍了sql server集簇索引的设计、如何创建sql server索引、如何优化索引、索引的能与不能、处理sql server 2000索引碎片技巧以及维护sql server索引以实现查询优化等等。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录