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

参照タイムゾーンとして使用するタイムゾーンを指定します

    タイムゾーンオフセットを追加で保存する必要があります timestampに 。

    @Milenがすでに説明したように(そしてマニュアル にリンクされています ):timestamp 特定の時点のみを(抽象的な値として)保存します。タイムゾーン修飾子はありません 保存すると、timestampの調整にのみ役立ちます UTCに関連して 。

    次のデモを検討してください:

    -- DROP TABLE tbl;
    CREATE TEMP TABLE tbl (id int, myts timestamptz, mytz interval);
    
    INSERT INTO tbl VALUES
     (1, now()                , EXTRACT (timezone from now()) * interval '1s')
    ,(2, '2012-01-01 00:00-05', interval '-5h')
    ,(3, '2012-01-01 00:00+04', interval '4h')
    ,(4, '2012-11-11 20:30+03', interval '3h');
    
    SELECT *
          ,(myts AT TIME ZONE mytz)::text
           || CASE WHEN mytz > '0:0' THEN '+' ELSE '' END
           || to_char(mytz, 'FMHH24:mi') AS timestamp_at_origin
    FROM tbl;
    

    ローカルで実行して確認してください。 <の詳細に特に注意してください。強い>タイムゾーン 構築し、(ローカル!)timestamp with time zoneからタイムゾーンを抽出する方法 。
    now() timestamp with time zoneを返します またはtimestamptz 略して。

    EXTRACT (timezone from now()) * interval '1s'
    

    timestamp_at_origin 起点で見たタイムゾーンのタイムスタンプを表示します。私があなたの質問を理解したなら、それがあなたが探しているものです。
    フォーマットをさらに改善することができます。

    この関連する質問 に興味があるかもしれません これにより、タイムゾーンのあいまいさと落とし穴に光が当てられます。



    1. MySQL:2つの列を制約して、そのうちの1つが常にNULLになるようにします

    2. DML (SQL スクリプト) で SQL Server 2008.2010 からデータをエクスポートする方法は?

    3. SSISでの日付形式の変更

    4. SQLキー、MUL vs PRI vs UNI