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;