ITPub博客

首页 > Linux操作系统 > Linux操作系统 > TIMESTAMP类型的时区

TIMESTAMP类型的时区

原创 Linux操作系统 作者:yangtingkun 时间:2009-03-07 23:59:43 0 删除 编辑

OracleTIMESTAMP类型比DATE类型不只是多了一个毫秒信息,TIMESTAMP类型还包括一个时区的信息。

 

 

看看SYSTIMESTAMP类型:

SQL> SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
-----------------------------------------------
07-3
-09 11.30.02.125000 下午 +08:00

SYSTIMESTAMP结果的最后部分的+08:00,就是TIMESTAMP类型的时区信息。由于数据库服务器选择了北京时间,也就是东8区,所以这里显示的是+08:00

时区对应的日期标识分别是TZHTZM,表示时区的小时和时区的分钟信息:

SQL> SELECT TO_TIMESTAMP_TZ('2009-3-7 23:15:23.23 +04:00',
  2  'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
  3  FROM DUAL;

TO_TIMESTAMP_TZ('2009-3-723:15:23.23+04:00','YYYY-MM-DDHH24:MI:SS.FFTZH:TZM
---------------------------------------------------------------------------
07-3
-09 11.15.23.230000000 下午 +04:00

除了这种数值表示之外,时区还可以用文字来表示,V$TIMEZONE_NAMES视图中包括数据库支持的所有的时区名称以及其对应的简称。

SQL> COL TZNAME FORMAT A40
SQL> COL TZABBREV FORMAT A30
SQL> SELECT * FROM V$TIMEZONE_NAMES
  2  WHERE ROWNUM < 20;

TZNAME                                   TZABBREV
---------------------------------------- -----------------------
Africa/Algiers                           LMT
Africa/Algiers                           PMT
Africa/Algiers                           WET
Africa/Algiers                           WEST
Africa/Algiers                           CET
Africa/Algiers                           CEST
Africa/Cairo                             LMT
Africa/Cairo                             EET
Africa/Cairo                             EEST
Africa/Casablanca                        LMT
Africa/Casablanca                        WET
Africa/Casablanca                        WEST
Africa/Casablanca                        CET
Africa/Ceuta                             LMT
Africa/Ceuta                             WET
Africa/Ceuta                             WEST
Africa/Ceuta                             CET
Africa/Ceuta                             CEST
Africa/Djibouti                          LMT

已选择19行。

Oracle提供了一个函数TZ_OFFSET可以返回一个时区名称对应的数值类型的时区范围:

SQL> SELECT TZNAME, TZABBREV, TZ_OFFSET(TZNAME)
  2  FROM V$TIMEZONE_NAMES
  3  WHERE ROWNUM < 20;

TZNAME                                   TZABBREV                       TZ_OFFS
---------------------------------------- ------------------------------ -------
Africa/Algiers                           LMT                            +01:00
Africa/Algiers                           PMT                            +01:00
Africa/Algiers                           WET                            +01:00
Africa/Algiers                           WEST                           +01:00
Africa/Algiers                           CET                            +01:00
Africa/Algiers                           CEST                           +01:00
Africa/Cairo                             LMT                            +02:00
Africa/Cairo                             EET                            +02:00
Africa/Cairo                             EEST                           +02:00
Africa/Casablanca                        LMT                            +00:00
Africa/Casablanca                        WET                            +00:00
Africa/Casablanca                        WEST                           +00:00
Africa/Casablanca                        CET                            +00:00
Africa/Ceuta                             LMT                            +01:00
Africa/Ceuta                             WET                            +01:00
Africa/Ceuta                             WEST                           +01:00
Africa/Ceuta                             CET                            +01:00
Africa/Ceuta                             CEST                           +01:00
Africa/Djibouti                          LMT                            +03:00

已选择19行。

这种字符类型的时区表示方法也是可以用在TIMESTAMP类型中的,其对应的日期标识为TZR

SQL> SELECT TO_TIMESTAMP_TZ(
  2  '2009-3-7 23:34:45.2134 Etc/GMT-8',
  3  'YYYY-MM-DD HH24:MI:SS.FF TZR')
  4  FROM DUAL;

TO_TIMESTAMP_TZ('2009-3-723:34:45.2134ETC/GMT-8','YYYY-MM-DDHH24:MI:SS.FFTZ
---------------------------------------------------------------------------
07-3
-09 11.34.45.213400000 下午 ETC/GMT-8

SQL> SELECT TO_CHAR(
  2  TO_TIMESTAMP_TZ(
  3  '2009-3-7 23:34:45.2134 Etc/GMT-8',
  4  'YYYY-MM-DD HH24:MI:SS.FF TZR'),
  5  'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
  6  FROM DUAL;

TO_CHAR(TO_TIMESTAMP_TZ('2009-3-723:
------------------------------------
2009-03-07 23:34:45.213400000 +08:00

 

 

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

上一篇: 输入TIMESTAMP类型
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10523444