Oracle Databaseでは、タイムゾーンをさまざまな場所に設定できます。 Oracleを使用するときにタイムゾーンを変更する4つの方法を以下に示します。
データベースのタイムゾーンを設定する
データベースの作成時にデータベースのタイムゾーンを設定できます。これを行うには、SET TIME_ZONE
を使用します CREATE DATABASE
の句 ステートメント。
例:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
この場合、タイムゾーンのリージョン名を使用しました。システムで有効なリージョン名の完全なリストを取得するには、「OracleDatabaseで有効なタイムゾーンのリストを返す方法」を参照してください。
または、実際のタイムゾーンオフセットを使用することもできます:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';
データベースの作成時にタイムゾーンを明示的に設定しない場合、デフォルトでサーバーのオペレーティングシステムのタイムゾーンになります。
データベースの現在のタイムゾーン設定を変更することもできます。これを行うには、ALTER DATABASE
を使用します ステートメント。
例:
ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';
データベースのタイムゾーンは、TIMESTAMP WITH LOCAL TIME ZONE
にのみ関連することに注意してください。 列。また、データ変換を回避し、データベース間でデータを転送する際のパフォーマンスを向上させるために、データベースのタイムゾーンをUTC(0:00)に設定することをお勧めします。
セッションタイムゾーンを設定する
セッションのタイムゾーンは、データベースのタイムゾーンとは別に設定できます。 TIMESTAMP WITH LOCAL TIME ZONE
を返す場合 データは、現在のセッションのタイムゾーンで返されます。
セッションのタイムゾーンは、TIMESTAMP
の場合にも有効になります 値はTIMESTAMP WITH TIME ZONE
に変換されます またはTIMESTAMP WITH LOCAL TIME ZONE
データ型。
セッションレベルでタイムゾーンを設定するには、いくつかの方法があります。
T 彼はORA_SDTZ
環境変数
ORA_SDTZ
環境変数
ORA_SDTZ
を使用してセッションのタイムゾーンを設定できます 環境変数。これは、次の値に設定できます。
- オペレーティングシステムのローカルタイムゾーン(
'OS_TZ'
) - データベースのタイムゾーン(
'DB_TZ'
) - UTCからの絶対オフセット(例:
'-04:00'
) - タイムゾーンの地域名(例:
'America/St_Kitts'
)
UNIX環境でこの環境変数を設定する例を次に示します。
% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'
ORA_SDTZ
のデフォルト値 変数は'OD_TZ'
。この値は、変数が設定されていないか、無効な値に設定されている場合に使用されます。
ALTER SESSION
ステートメント
SET TIME_ZONE
を使用して、特定のSQLセッションのタイムゾーンを変更できます。 ALTER SESSION
の句 ステートメント。
TIME_ZONE
次の値に設定できます:
- セッションが開始されたときのデフォルトのローカルタイムゾーン(
local
) - データベースのタイムゾーン(
dbtimezone
) - UTCからの絶対オフセット(例:
'-04:00'
) - タイムゾーンの地域名(例:
'Canada/Eastern'
)
TIME_ZONE
の設定例を次に示します。 そのような値に:
ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';
SESSIONTIMEZONE
を使用して、現在のセッションのタイムゾーンを確認できます。 機能。
例:
SELECT SESSIONTIMEZONE FROM DUAL;
結果:
Australia/Brisbane
私の場合、セッションのタイムゾーンはオーストラリア/ブリスベンに設定されています。
AT TIME ZONE
条項
日時式には、AT LOCAL
を含めることができます 句またはAT TIME ZONE
句。 AT LOCAL
を含める場合 句を指定すると、結果は現在のセッションタイムゾーンで返されます。 AT TIME ZONE
を含める場合 句の場合、タイムゾーンは次のいずれかになります。
- タイムゾーンオフセット
- タイムゾーンの地域名
-
DBTIMEZONE
(この関数はデータベースのタイムゾーンを返します) -
SESSIONTIMEZONE
(この関数は現在のセッションのタイムゾーンを返します) - 有効なタイムゾーン形式の文字列を返す式。
例:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT TIME ZONE '+12:00'
FROM DUAL;
結果:
02/JAN/30 04:30:35.000000000 AM +12:00
この場合、FROM_TZ()
を使用しました タイムスタンプ値とタイムゾーンをTIMESTAMP WITH TIME ZONE
に変換する関数 価値。次に、AT TIME ZONE
を使用しました 別のタイムゾーンを指定する句。
これは同じ例ですが、今回はAT LOCAL
を指定します :
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
AT LOCAL
FROM DUAL;
結果:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE