ガイド

Oracle Databaseでは、さまざまな場所でタイムゾーンを設定できます。 以下は、Oracleを使用するときにタイムゾーンを変更する4つの方法です。

データベースのタイムゾーンの設定

データベースの作成時にデータベースのタイムゾーンを設定できます。 これを行うには、CREATE DATABASE文のSET TIME_ZONE句を使用します。

:

CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

この場合、タイムゾーンの地域名を使用しました。 システム上の有効な地域名の完全なリストを取得するには、Oracle Databaseで有効なタイムゾーンのリストを返す方法を参照してください。

または、実際のタイムゾーンオフセットを使用することもできます:

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データ型に変換されたときにも有効になります。

セッションレベルでタイムゾーンを設定するには、いくつかのことを行うことができます。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文

特定のSQLセッションのタイムゾーンは、ALTER SESSION文のSET TIME_ZONE句を使用して変更できます。

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 

私の場合、セッションのタイムゾーンはAustralia/Brisbaneに設定されています。

AT TIME ZONE句

datetime式には、AT LOCAL句またはAT TIME ZONE句を含めることができます。 AT LOCAL句を指定した場合、結果は現在のセッションのタイムゾーンで返されます。 6882>句を指定すると、タイムゾーンは次のいずれかになります:

  • タイムゾーンオフセット
  • タイムゾーン地域名
  • 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値とタイムゾーンをTIMESTAMP WITH TIME ZONE値に変換しました。 次に、AT TIME ZONE句を使用して別のタイムゾーンを指定しました。

ここに同じ例がありますが、今回は指定しますAT LOCAL:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;

検索結果:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

Leave a Reply

メールアドレスが公開されることはありません。