タイムスタンプのクエリとフォーマット
UTC で保存されたデータを、必要な任意のタイムゾーンでクエリおよび表示できるようになりました。このステップでは、EXTRACT 関数と AT TIME ZONE 句を使用して、タイムスタンプを操作およびフォーマットします。
ステップ 1: EXTRACT を使用したタイムスタンプ部分の抽出
EXTRACT 関数を使用すると、タイムスタンプから特定のコンポーネント(年、月、時など)を抽出できます。各イベントの年を取得しましょう。
SELECT event_name, EXTRACT(YEAR FROM event_time) AS event_year FROM events;
このクエリは、保存されている UTC タイムスタンプから年を抽出します。
event_name | event_year
-------------------+------------
Conference Call | 2024
Project Meeting | 2024
Follow-up Meeting | 2024
(3 rows)
ステップ 2: AT TIME ZONE を使用したタイムスタンプの変換
保存されている UTC 時刻を特定のローカルタイムゾーンで表示するには、AT TIME ZONE 句を使用します。すべてのイベント時刻を America/Los_Angeles タイムゾーンに変換してみましょう。
SELECT event_name, event_time AT TIME ZONE 'America/Los_Angeles' AS los_angeles_time FROM events;
このクエリは、UTC の event_time を取得し、ロサンゼルスでの同等のローカル時刻を表示します。
event_name | los_angeles_time
-------------------+---------------------
Conference Call | 2024-01-20 10:00:00
Project Meeting | 2024-01-20 10:00:00
Follow-up Meeting | 2024-01-21 12:00:00
(3 rows)
ご覧のとおり、「Project Meeting」は UTC で 18:00:00 に発生しましたが、ロサンゼルス時間では正しく 10:00:00 と表示されています。
ステップ 3: EXTRACT と AT TIME ZONE の組み合わせ
これらの機能を組み合わせて、より強力なクエリを作成できます。たとえば、Europe/London タイムゾーンで発生した各イベントの時刻を検索するには、次のようにします。
SELECT event_name, EXTRACT(HOUR FROM event_time AT TIME ZONE 'Europe/London') AS event_hour_london FROM events;
このクエリは、まず時刻をロンドンタイムゾーンに変換し、次に時を抽出します。
event_name | event_hour_london
-------------------+-------------------
Conference Call | 18
Project Meeting | 18
Follow-up Meeting | 20
(3 rows)