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

タイムスタンプとISO日付を含むOracleSQLクエリステートメントと条件

    以前の質問 に基づく 、TとZの両方を文字リテラルとして扱い、基本的にそれらを無視して、次を使用するのは魅力的です。

    to_timestamp_tz('2014-01-28T12:00:0Z', 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
    

    to_timestamp_tz()を使用する場合 タイムゾーンを指定しない場合、to_timestamp()のように、デフォルトでセッションのタイムゾーンになります。;したがって、Zulu / UTCで指定された時間は、そのゾーン情報を失います:

    alter session set time_zone = 'America/New_York';
    select to_timestamp_tz('2014-01-28T12:00:0Z',
      'YYYY-MM-DD"T"HH24:MI:SS"Z"') from dual;
    
    TO_TIMESTAMP_TZ('2014-01-28T12:00:0Z','YYYY-MM-DD"T"HH24:MI:SS"Z"')
    -------------------------------------------------------------------
    28-JAN-14 12.00.00.000000000 AMERICA/NEW_YORK                       
    

    あなたの12:00の時刻は、ニューヨークでは12:00 UTCではなく、12:00として表示されます。

    値が常にUTCを表すと想定される場合、より安全な変換は、 from_tz() 機能

    WHERE MODIFICATION_DATE >= from_tz(to_timestamp('2014-01-28T12:00:0Z',
      'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC')
    

    これにより、UTC時刻が適切に取得されます:

    alter session set time_zone = 'America/New_York';
    select from_tz(to_timestamp('2014-01-28T12:00:0Z',
      'YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'UTC') from dual;
    
    FROM_TZ(TO_TIMESTAMP('2014-01-28T12:00:0Z','YYYY-MM-DD"T"HH24:MI:SS"Z"'),'UTC')
    -------------------------------------------------------------------------------
    28-JAN-14 12.00.00.000000000 UTC                                                
    


    1. 同じ列値を持つフィールドの合計を見つけるためのMysqlクエリ

    2. 通貨換算で各製品タイプの最低価格を取得する

    3. Azureのギャップを埋める:マネージドインスタンス

    4. group_concatの結果はIN状態では機能しません