而不是总是写:
select my_column at time zone 'UTC' at time zone 'Europe/Paris' from my_table;
我更愿意这样做:
select dtz(my_column, 'Europe/Paris') from my_table;
UTC
是系统级的(服务器时区),甚至可以在dtz()
中进行硬编码。
有人可以共享这种功能的有效实现吗?
修改
select my_column at time zone 'UTC' at time zone 'Europe/Paris' from my_table;
可以这样缩短一点:
select timezone('UTC', my_column) at time zone 'Europe/Paris' from my_table;
答案 0 :(得分:1)
看到你在这方面遇到麻烦真是太难了。
我不相信服务器时区可以帮到你。据我了解,它是SQL客户端时区而不是影响它。
你不会得到比(IMMUTABLE
)更高效的功能:
RETURN arg1 AT TIME ZONE 'UTC' AT TIME ZONE arg2;
但是这总是比在SQL中内联编写效率低。
理想情况下,您的时间戳应为TIMESTAMP WITH TIMEZONE
而不是TIMESTAMP WITHOUT TIMEZONE
,因为它用于存储绝对时间戳而不是本地时间戳。这样可以防止需要进行两次转换(转换为UTC和转换)。但这确实意味着您需要将AT TIME ZONE 'UTC'
添加到INSERT
和UPDATE
语句中。