将日期时间列转换为不同时区的查询
Query to convert datetime column to a different time zone
我正在尝试 assemble 日期、时间和时区,然后将其转换为 UTC 时区。
在下面的查询中,使用存储时区的数据库字段创建了一个错误 --- 即 t.timezone
t.timezone 的值为 Asia/Tokyo 。所有其他时区都采用类似格式。
select (select CONCAT( DATE(m.last_mailing at time zone 'utc' + INTERVAL '1 day'), ' ', MAKE_TIME(m.email_delivery_hour::int, 0, 0))::timestamp with time zone t.timezone) at time zone 'utc' FROM acts2301_membership.member_subscriptions m INNER JOIN acts2301_email_queue.timezone t ON (m.timezone_reference = t.reference) WHERE m.subscription_reference = '514';
以下是按照您问题中的逻辑执行的查询。但是,这在很大程度上取决于各种数据和服务器的时区设置方式(另请参阅我对您的问题的评论),因此您可能会发现必须调整指定 t.timezone
和 UTC
:
SELECT ((date_trunc('day', (m.last_mailing AT TIME ZONE 'UTC')::timestamp) +
interval ('1 day') +
(m.email_delivery_hour::int::text || ':00:00')::time
)::timestamptz AT TIME ZONE t.timezone
)::timestamptz AT TIME ZONE 'UTC'
FROM acts2301_membership.member_subscriptions m
JOIN acts2301_email_queue.timezone t ON m.timezone_reference = t.reference
WHERE m.subscription_reference = '514';
还要注意适当的代码格式之美...
我正在尝试 assemble 日期、时间和时区,然后将其转换为 UTC 时区。
在下面的查询中,使用存储时区的数据库字段创建了一个错误 --- 即 t.timezone
t.timezone 的值为 Asia/Tokyo 。所有其他时区都采用类似格式。
select (select CONCAT( DATE(m.last_mailing at time zone 'utc' + INTERVAL '1 day'), ' ', MAKE_TIME(m.email_delivery_hour::int, 0, 0))::timestamp with time zone t.timezone) at time zone 'utc' FROM acts2301_membership.member_subscriptions m INNER JOIN acts2301_email_queue.timezone t ON (m.timezone_reference = t.reference) WHERE m.subscription_reference = '514';
以下是按照您问题中的逻辑执行的查询。但是,这在很大程度上取决于各种数据和服务器的时区设置方式(另请参阅我对您的问题的评论),因此您可能会发现必须调整指定 t.timezone
和 UTC
:
SELECT ((date_trunc('day', (m.last_mailing AT TIME ZONE 'UTC')::timestamp) +
interval ('1 day') +
(m.email_delivery_hour::int::text || ':00:00')::time
)::timestamptz AT TIME ZONE t.timezone
)::timestamptz AT TIME ZONE 'UTC'
FROM acts2301_membership.member_subscriptions m
JOIN acts2301_email_queue.timezone t ON m.timezone_reference = t.reference
WHERE m.subscription_reference = '514';
还要注意适当的代码格式之美...