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

PostgreSQL:特定の時間帯の特定の曜日に発生する行を選択する

    AT TIME ZONE timestamp without timezoneに適用された場合 タイムゾーン付きのtimestamp with timezoneを生成します (およびその逆)。そして、このtimestamp with timezone セッションのタイムゾーンで解釈されます(この場合、UTCに強制されます 。

    したがって、式EXTRACT (dow from time at time zone 'Brisbane/Australia') timeにブリスベンの日を抽出しません (UTC) 、変換されたtimeに対応する日を抽出します UTCタイムゾーンに事実上住んでいる誰かの観点から。

    例として、これを入力しているときに、UTCであるふりをしている場合:

    => set timezone to 'UTC';
    => select now(),now() at time zone 'Australia/Brisbane';
                 now              |         timezone          
    ------------------------------+---------------------------
     2013-10-27 18:01:03.15286+00 | 2013-10-28 04:01:03.15286
    

    いいでしょう、UTCの日曜日18:01とブリスベンの月曜日04:01です

    ただし、タイムゾーンの変位をtimestamp without timezoneに適用する場合 :

    select now(),now()::timestamp at time zone 'Australia/Brisbane';
                  now              |           timezone            
    -------------------------------+-------------------------------
     2013-10-27 18:01:57.878541+00 | 2013-10-27 08:01:57.878541+00
    

    2番目の列が前の結果とどのように異なるかに注意してください。実際には、UTCで表現されたブリスベンから20時間離れています。おそらく、あまり意味のない質問に対する技術的に正しい答えです。

    おそらくあなたはこれが欲しいでしょう:

    EXTRACT (dow from (time AT TIME ZONE 'UTC') at time zone 'Brisbane/Australia')=0
    

    答える必要があります:日付と時刻time UTCで測定すると、ブリスベンの日曜日に対応しますか?




    1. hibernateのbetween句を使用して日付を比較する方法

    2. 日-月-年を含む日付のmysqlで必要なデータ型

    3. postgreSQLのタイムスタンプから日付を抽出します

    4. MySQLエラー:#1142-SELECTコマンドがユーザーに拒否されました