首页 > 解决方案 > 获取基于月份的动态时区偏移

问题描述

我有一个查询

"TO_CHAR((TIMEZONE('#{ tz_offset }', created_at) + (#{ months.to_s } * INTERVAL '1 month')))"

最终查询变为:

"SELECT sum(price) as sum_total, min(TO_CHAR((TIMEZONE('-05:00', created_at) + (0 * INTERVAL '1 month')), 'YYYY-MM')) as formatted_date, min(TO_CHAR((TIMEZONE('-05:00', created_at) + (0 * INTERVAL '1 month')), 'Mon/YY')) as key FROM items WHERE created_at BETWEEN '2018-09-01 04:00:00' AND '2020-02-01 03:59:59' GROUP BY TO_CHAR((TIMEZONE('-05:00', created_at) + (0 * INTERVAL '1 month')), 'YYYY-MM') ORDER BY TO_CHAR((TIMEZONE('-05:00', created_at) + (0 * INTERVAL '1 month')), 'YYYY-MM')"

如您所见, tz_offset 变为-05:00

但是,我遇到的问题是 tz_offset 是静态的,它可以根据月份而变化。例如,CST 时间是 7 月 -05:00,而 8 月是 -06:00。我想确保金额根据夏令时落入正确的月份。postgres 可以根据时区计算这个 tz_offset 吗?

标签: postgresql

解决方案


我能够使用它来工作

created_at AT TIME ZONE <tz_name>

推荐阅读