0

我作爲字符串存儲一些日期在postgresdb解析Postgres的日期存儲爲字符串包括偏移時區

"Fri, 24 Jun 2016 04:13:26 -0700" 

我希望把這些日子的日期。

我可以使用

to_timestamp(date,'Dy, DD Mon YYYY HH24:MI:SS') 

但我不能工作,如何處理時區。似乎有OF作爲偏移量的參數。

如果我使用

to_timestamp(date, 'Dy, DD Mon YYYY HH24:MI:SS OF') 

查詢掛起。我無法弄清楚我在那裏做錯了什麼。

注意:我正在使用activerecord和rails。因此查詢實際上

Model.all.order("to_timestamp(date,'Dy, DD Mon YYYY HH24:MI:SS OF') DESC") 
+0

也許吧? 'Time.zone.parse(「Fri,24 Jun 2016 04:13:26 -0700」)。to_date'。只是一個猜測。查看:http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html –

+0

PostgreSQL足夠聰明:'選擇帶時區的時間戳'2016年6月24日星期五04:13:26 -0700';''返回' 2016-06-24 14:13:26 + 03'爲我的位置。 – Abelisto

+0

@Abelisto有沒有辦法用to_timestamp方法做到這一點?問題是我試圖用一個訂單而不是一個選擇。 – Carpela

回答

2

PostgreSQL支持多種格式的日期/時間/時間戳值輸入。 See the reference

您的格式也受支持,因此可以使用簡單類型轉換。有三種方式以及兩個類型符號PostgreSQL的:

timestamp with time zone或更短timestamptz

和類型轉換,如:

cast('Fri, 24 Jun 2016 04:13:26 -0700' as timestamp with time zone) 
timestamp with time zone 'Fri, 24 Jun 2016 04:13:26 -0700' 
'Fri, 24 Jun 2016 04:13:26 -0700'::timestamptz 

是相等的。您可以根據自己的口味使用任意組合。

所以回答你的問題:

Model.all.order("date::timestamptz DESC") 

應該使的伎倆。

0

是你可以試試這個方法

「週五,2016年6月24日4時13分26秒-0700」 .to_datetime

希望,這將有助於您。

+0

當然,我可以做到這一點,但我只能這樣做,一旦我帶回了查詢。即我希望能夠純粹使用activerecord來完成某件事情。 – Carpela

+0

你的意思是說,你需要通過查詢順序的日期值? –

+0

這正是我想要做的。 – Carpela