TIMESTAMP型別的時區

yangtingkun發表於2009-03-07

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章