2016-03-29 30 views
-1

yerine daima yazma saat dilimiyle datetime dönmek için ofset işlev:Postgres

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

Ben yapmayı tercih ederim olacaktır:

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

UTC sistem genelinde (sunucu saat dilimi), ve hatta olabilir dtz()'da kodlanmış olabilir.

Birisi böyle bir işlevin etkili bir şekilde uygulanmasını paylaşabilir mi?

Düzenleme

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

çok çok biraz böyle kısaltılabilir Can:

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

cevap

1

Onun bu konuda sorun yaşıyorsanız ne olduğunu görmek için gerçekten zor olması.

Sunucu saat diliminin burada size yardımcı olduğuna inanmıyorum. Anladığım kadarıyla, bunu etkilemek için SQL istemci zaman dilimi.

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

Ama bu her zaman SQL satır içine yazmaya daha az verimli olacaktır:

Sen ( IMMUTABLE) daha fonksiyonu daha verimli olsun gitmiyoruz.

Zaman damgası, yerel zaman damgaları değil mutlak zaman damgalarını saklamak için kullanıldığından TIMESTAMP WITHOUT TIMEZONE yerine TIMESTAMP WITH TIMEZONE olmalıdır. Bu iki dönüşüm ihtiyacını önler (UTC'ye ve bunun dışında). Ancak bu, AT TIME ZONE 'UTC''u INSERT ve UPDATE ifadelerinize eklemeniz gerektiği anlamına gelir.

+0

Cevabınız için teşekkür ederiz. GeliştirilmişNamingStrategy gitmiş ve ihtiyacım var çünkü (Ben, bu şekilde yuvarlak) Hibernate 5 port benim uygulama için yönetirseniz zaman dilimi ile zaman damgası kullanırdım. Benim durumumdaki istemci, veritabanından aynı sunucuda çalışan bir Spring Boot uygulamasıdır. Hızlı sorgulama için SQL sorgularında "saat diliminde" kullanırım ve umudum sorularımda açıklandığı gibi bir işlev kullanarak ayrıntıyı azaltmaktı. Ama sana katılıyorum, zaman dilimini kullanarak zaman damgasını kullanmak problemimi çözmenin en iyi yolu olacaktır. – yglodt

+0

Evet, verimden daha verimli "verimli" bir çözüm yok ... en iyi fonksiyona dayanan tek kişi, belirttiğim gibi sadece bir liner olacak. –