2016-03-29 4 views
-1

オフセット:Postgresはタイムゾーンと日時を返すように機能する代わりに、常に書き込みの

select dtz(my_column, 'Europe/Paris') from my_table; 

UTCは、システム全体(サーバーのタイムゾーン)であり、さらに可能性:

select my_column at time zone 'UTC' at time zone 'Europe/Paris' from my_table; 

私がやって好むだろうdtz()にハードコードされています。

誰かがそのような機能の効率的な実装を共有することはできますか?

select timezone('UTC', my_column) at time zone 'Europe/Paris' from my_table; 

答えて

1

あなたがこの上に問題があるかを見るために、その本当にdificult:

編集

select my_column at time zone 'UTC' at time zone 'Europe/Paris' from my_table; 

は、このような非常に非常に少し短縮することができます。

ここでは、サーバーのタイムゾーンが役立つとは思えません。私が理解しているように、これに影響を与えるのはSQLクライアントのタイムゾーンです。

あなたは(IMMUTABLE)よりも効率的な機能を取得するつもりはない:

RETURN arg1 AT TIME ZONE 'UTC' AT TIME ZONE arg2; 

をしかし、これは常にあなたのSQLでインラインで書くよりも効率になります。

ローカルタイムスタンプではなく絶対タイムスタンプを格納するために使用されているので、タイムスタンプはTIMESTAMP WITHOUT TIMEZONEではなく、TIMESTAMP WITH TIMEZONEであることが理想的です。これにより、2つの変換(UTCへの変換とそれからの変換)が不要になります。しかし、それはあなたのINSERTUPDATEステートメントにAT TIME ZONE 'UTC'を追加する必要があることを意味します。

+0

あなたの答えをありがとう。私は、ImprovedNamingStrategyがなくなって、私が必要とするので、私はアプリケーション(はい、そのようにラウンド)にHibernate 5を移植することを管理するなら、タイムゾーンでタイムスタンプを使用します。私の場合のクライアントは、データベースと同じサーバー上で動作するSpringブートアプリケーションです。高速クエリでは、SQLクエリで "at time zone"を使用し、私の質問に記述されている関数を使用して冗長性を減らすことができれば幸いです。しかし、私はタイムゾーンでタイムスタンプを使用することが私の問題を解決する最良の方法であることに同意します。 – yglodt

+0

冗長なものよりも "効率的な"ソリューションはありません...私が示すように、最高の機能をベースにしたものは単なるライナーに過ぎません。 –

関連する問題