Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres函数返回带有时区偏移的datetime_Sql_Postgresql - Fatal编程技术网

Sql Postgres函数返回带有时区偏移的datetime

Sql Postgres函数返回带有时区偏移的datetime,sql,postgresql,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 '

不要总是写:

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;

很难看出你在这方面有什么问题

我不相信服务器时区对你有帮助。据我所知,是SQL客户端时区影响了这一点

你不会得到比(
不可变
)更有效的函数:

但这总是比在SQL中内联编写效率低


理想情况下,时间戳应该是带时区的
时间戳
,而不是不带时区的
时间戳
,因为它用于存储绝对时间戳,而不是本地时间戳。这将避免需要两次转换(转换为UTC和转换为UTC)。但这确实意味着您需要将时区“UTC”的
添加到您的
INSERT
UPDATE
语句中。

谢谢您的回答。如果我想将Hibernate 5移植到我的应用程序中(是的,就是这样),我会使用带有时区的时间戳,因为改进的命名策略已经不存在了,我需要它。在我的例子中,客户机是一个Spring引导应用程序,运行在与数据库相同的服务器上。对于快速查询,我在SQL查询中使用“at time zone”,希望通过使用问题中描述的函数来减少冗长。但我同意你的看法,使用时间戳和时区将是解决我的问题的最好方法。是的,没有比冗长的解决方案更“有效”的了。。。正如我所指出的,最好的基于函数的将只是一行。
RETURN arg1 AT TIME ZONE 'UTC' AT TIME ZONE arg2;