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

Oracleデータベースからオペレーティングシステムのタイムゾーンを文字列形式で収集するにはどうすればよいですか? (日付をtzでtsに移行/変換します)

    データがすでにOracleSQLテーブルにあり、タイムゾーン付きのタイムスタンプに変換する必要がある場合(たとえば、同じテーブルに作成した新しい列)、OSに明示的に移動する必要はありません。 Oracleデータベース自体以外のJavaまたはその他のものを使用します。

    「日付」がサーバーのタイムゾーン(通常はサーバーを意味する「データベース」と言います)またはクライアントのタイムゾーン(「セッション」と言う)にあると想定する必要があるかどうかは、質問からは明らかではありません。クライアント)。どちらの方法でも:

    update <your_table>
    set <timestamp_with_time_zone_col> = 
                from_tz(cast<date_col> as timestamp, dbtimezone)
    ;
    

    またはsessiontimezoneを使用します 2番目の引数として、それが必要な場合。

    これは、データベース(および/またはセッション)のタイムゾーンが、クライアントのデータベースでそれぞれ適切に設定されていることを前提としています。そうでない場合/そうでない場合は、最初に修正する必要があります。そもそもパラメータが正しく設定されていれば、Oracleは日中の節約時間を完全に処理できます。 (そうでない場合は、データベースが最初にサポートするよりも操作を「より正確」にしようとする理由が明確ではありません。)

    例:以下のWITH句で、列dtを持つテーブルをシミュレートします。 データ型date 。次に、それをtimestamp with time zoneに変換します 、私のセッションの(クライアント)タイムゾーンで。

    with
      my_table ( dt ) as ( 
        select to_date('2018-06-20 14:30:00', 'yyyy-mm-dd hh24:mi:ss') from dual 
      )
    select dt,
           from_tz(cast(dt as timestamp), sessiontimezone) as ts_with_tz
    from   my_table
    ;
    
    DT                  TS_WITH_TZ                                       
    ------------------- -------------------------------------------------
    2018-06-20 14:30:00 2018-06-20 14:30:00.000000000 AMERICA/LOS_ANGELES
    


    1. mysqldbを使用してRailsでサーバーを起動できません

    2. ORDERBYおよびLIMIT後のUNION

    3. 自動化を使用してPostgreSQLのリリーステストを高速化

    4. 定期的にデータをテーブルにロードするための最良の方法は何ですか