Postgres函数返回带有时区偏移的日期时间

时间:2016-03-29 07:42:32

标签: sql postgresql

而不是总是写:

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;

1 个答案:

答案 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'添加到INSERTUPDATE语句中。

相关问题