sql >> データベース >  >> RDS >> Oracle

Oracleでタイムゾーンを変更する4つの方法

    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を使用してセッションのタイムゾーンを設定できます 環境変数。これは、次の値に設定できます。

    • オペレーティングシステムのローカルタイムゾーン('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

    1. MySQL/MariaDBテーブルを最適化する方法

    2. Java:OracleデータベースにCLOBを挿入する方法

    3. MySQLの現在のタイムゾーンを取得するにはどうすればよいですか?

    4. SQLServerJOINSについて知っておくべきことすべて