轉:Oracle TimeZone
Oracle的時區問題Oracle 9i 開始多了 3 個關於時間的資料型別:TIMESTAMP [(precision)] TIMESTAMP [(precision)] WITH TIME ZONE TIMESTAMP [(precision)] WITH LOCAL TIME ZONE,其中 TIMESTAMP [(precision)] WITH TIME ZONE 儲存了時區資訊。 1. Oracle 的時區設定 Oracle 的時區可以分為兩種,一種是資料庫的時區,一種是 session 時區,也就是客戶端連線時的時區(經過實驗, 資料庫的時區在建立資料庫時可以透過在 create database 語句中加上 SET TIME_ZONE = ' { { + | - } hh : mi | time_zone_region } ' 來指定,如果,不指定, SQL> alter database set time_zone='+06:00'; alter database set time_zone='+06:00' * ERROR at line 1: ORA-02231: missing or invalid option to ALTER DATABASE TOM 對此問題有過,TIME_ZONE 的設定主要是為了 WITH LOCAL TIME ZONE,當 session 的時區和資料庫的時區不同時,oracle 根據時區的差距轉換到資料庫的時間,再儲存到資料庫的 WITH LOCAL TIME ZONE 型別中,他是不儲存時區的,所以需要 TIME_ZONE 來進行各種時區之間時間的轉換(WITH TIME ZONE 型別儲存了原始的時區,所以不需要 TIME_ZONE 的設定也可以進行各種時區之間的轉換)。 select || '.' || || '.' || TSLTZcolumn (一般查詢後的結果為:OE.ORDERS.ORDER_from sys.obj$ o, sys.col$ c, sys.user$ u where c.type# = 231 and o.obj# = c.obj# and u.user# = o.owner#; Session 的時區是根據客戶端的時區來決定的,當然連線以後也可以透過 alter session 來改變。WITH LOCAL TIME ZONE 型別會根據 TIME_ZONE 的設定,自動把時間轉換為 session 所在時區的時間顯示出來,而 WITH TIME ZONE 因為儲存了時區,不需要根據 TIME_ZONE 的設定來轉換。 2. 檢視時區 可以分別使用 SESSIONTIMEZONE / DBTIMEZONE 內建函式檢視 session 和資料庫時區: SYS@SKYDB> select dbtimezone from dual; DBTIME SYS@SKYDB> select sessiontimezone from dual; SESSIONTIMEZONE
TZ_OFFSET ( { 'time_zone_name' SELECT TZ_OFFSET('US/Eastern') FROM DUAL; TZ_OFFS 其中 time_zone_name 也可以從 V$TIMEZONE_NAMES 獲得。 3. 幾個內建時間函式的比較 sysdate/systimestamp 都是返回資料庫的時間並且使用資料庫的時區, SYS@SKYDB> select sysdate from dual; SYSDATE SYSTIMESTAMP Total System Global Area 89202456 bytes SYSDATE SYS@SKYDB> select systimestamp from dual; SYSTIMESTAMP SQL> select sysdate from dual; SYSDATE ------------------- 2006-02-08 22:21:40 SQL> select systimestamp from dual; SYSTIMESTAMP ------------------------------ 02-AUG-06 10.22.38.578000 PM +08:00 SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. 修改時區為 +09:00 SQL> startup ORACLE instance started. Total System Global Area 131145064 bytes Fixed Size 453992 bytes Variable Size 109051904 bytes Database Buffers 20971520 bytes Redo Buffers 667648 bytes Database mounted. Database opened. SQL> select sysdate from dual; SYSDATE --------- 02-AUG-06 SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. SQL> select sysdate from dual; SYSDATE ------------------- 2006-08-02 22:32:59 SQL> select systimestamp from dual; SYSTIMESTAMP ------------------------------ 02-AUG-06 11.35.05.171000 PM +09:00 另外,有個初始化引數 fixed_date,可以設定 sysdate 返回指定的時間: alter system set fixed_date='2005-04-04-11-00- this fixed_date is normally used, in oracle, for dubugging purpose. once finishing it, you can set it back: alter system set fixed_date=none Eygle 的關於這個引數的相關文章: current_timestamp/current_date 也會返回資料庫的時間,但轉換為 session 的時區進行顯示,可以使用 alter session set time_zone 改變 session 時區。 4. 四個日期時間型別的實驗 SQL> select dbtimezone from dual; DBTIME ------ +06:00 SQL> select sessiontimezone from dual; SESSIONTIMEZONE ------------------------------ +08:00 SQL> ed Wrote file afiedt.buf 1 create table tztest(a date, 2 b timestamp(0), 3 c timestamp(0) with time zone, 4* d timestamp(0) with local time zone) SQL> / Table created. SQL> alter session set nls_date_format ='yyyy-dd-mm hh24:mi:ss'; Session altered. SQL> select sysdate from dual; SYSDATE ------------------- 2006-02-08 22:21:40 SQL> select systimestamp from dual; SYSTIMESTAMP ------------------------------ 02-AUG-06 10.22.38.578000 PM +08:00 SQL> select current_date from dual; CURRENT_DATE ------------------- 2006-02-08 22:23:50 SQL> select current_timestamp from dual; CURRENT_TIMESTAMP ------------------------------ 02-AUG-06 10.24.04.031000 PM +08:00 SQL> insert into tztest 2 values(sysdate,systimestamp, 1 row created. SQL> commit; Commit complete. SQL> select * from tztest; A ------------------- B ------------------------------ C ------------------------------ D ------------------------------ 2006-02-08 22:25:59 02-AUG-06 10.25.59 PM 02-AUG-06 10.25.59 PM +08:00 02-AUG-06 10.25.59 PM SQL> exit Disconnected from Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.3.0 - Production 修改了客戶端作業系統的時區 C:Documents and SettingsAdministrator>sqlplus sky/xxxx SQL*Plus: Release 9.2.0.3.0 - Production on Wed Aug 2 23:28:01 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.3.0 - Production SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. SQL> select sysdate from dual; SYSDATE ------------------- 2006-08-02 22:28:49 SQL> select systimestamp from dual; SYSTIMESTAMP ------------------------------ 02-AUG-06 11.29.33.609000 PM +09:00 SQL> select * from tztest; A ------------------- B ------------------------------ C ------------------------------ D ------------------------------ 2006-08-02 22:25:59 02-AUG-06 10.25.59 PM 02-AUG-06 10.25.59 PM +08:00 02-AUG-06 11.25.59 PM |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8337095/viewspace-1032115/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle TimezoneOracle
- Oracle timezone的相關知識Oracle
- 關於Oracle Timezone的一點總結Oracle
- oracle 10.2.0.1 emctl Timezone mismatch: The agentTZRegion value (US/Eastern)OracleAST
- BUG: JS 修改Date的TimezoneJS
- linux timezone 設定LINUX 時區Linux
- k8s中ConfigMap的timezone使用K8S
- Django日期欄位預設值default=timezone.nowDjango
- ORA-39322: Cannot use transportable tablespace with timestamp with timezone...
- @JsonFormat(pattern=“yyyy-MM-dd HH:mm:ss“,timezone=“GMT+8“)JSONORM
- ORACLE EVENTS(轉)Oracle
- ORACLE DSI(轉)Oracle
- ORACLE TEXT(轉)Oracle
- Oracle 轉MySqlOracleMySql
- JVM載入TimeZone讀取檔案優先順序實戰分析JVM
- 第十五章 php時區報錯 We selected the timezone 'UTC'PHP
- GC Agent Startup Fails on AIX due to Invalid Timezone Setting at OS_825933.1GCAI
- PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* tPHPUI
- oracle行列轉換-行轉列Oracle
- oracle行列轉換-列轉行Oracle
- oracle myintis 轉義Oracle
- Oracle轉換PostgresOracle
- oracle轉義字元Oracle字元
- Oracle Partitioning(轉)Oracle
- Java初探Oracle(轉)JavaOracle
- oracle cache table(轉)Oracle
- Oracle審計(轉)Oracle
- oracle 列轉行Oracle
- dump oracle events(轉)Oracle
- 轉載oracle awrOracle
- ORACLE lock 轉貼Oracle
- (轉)Oracle索引原理Oracle索引
- oracle巡檢(轉)Oracle
- Oracle In Memory Undo(轉)Oracle
- ORACLE常用Script(轉)Oracle
- ORACLE常用Script (轉)Oracle
- Oracle logminer(轉)Oracle
- oracle毛病(二) (轉)Oracle