查询和格式化时间戳
现在你已经将数据存储为 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)