2016-07-05 82 views
0

我遇到了包含2種不同格式的日期(以文本形式存儲)的列。使用to_date()需要指定格式,所以只能使用其中的一部分。在同一列中的不同格式時轉換爲日期

有沒有辦法將兩種格式並行轉換爲SELECT?

 created_at   | id 
---------------------------+--------- 
2015-08-27 04:59:40 -0400 | 9993833 
2015-08-27T03:40:07+12:00 | 9984557 
2015-08-26 03:04:35 -0400 | 9980626 
2015-08-26T13:11:51+12:00 | 9978784 
2015-08-26T06:18:04+12:00 | 9974751 
2015-08-25 00:21:47 -0400 | 9965448 
2015-08-24T15:01:09+12:00 | 9952732 
2015-08-23 22:47:32 -0400 | 9952671 
2015-08-24T12:49:57+12:00 | 9952099 
2015-08-24T12:04:04+12:00 | 9951839 
2015-08-23T17:49:24+12:00 | 9948236 
2015-08-23T11:37:53+12:00 | 9947015 
2015-08-21 03:13:16 -0400 | 9934367 
2015-08-21T18:36:18+12:00 | 9934148 
2015-08-21T17:23:30+12:00 | 9933522 
2015-08-21T15:33:50+12:00 | 9932949 
2015-08-20 12:06:37 -0400 | 9927425 
2015-08-21T03:16:58+12:00 | 9926932 
+1

只要postgresql支持它,就可以使用CASE ... WHEN構造。 – Michal

+0

你想要什麼,只是日期部分或整個時間戳? – jarlh

+2

這些格式沒有那麼不同,postgresql可以自動識別它們,只是將它們轉換爲帶時區的時間戳f.ex. 'select created_at :: timestamptz'。 – pozs

回答

0

(假設僅存在2種不同類型的日期格式) 分別處理這兩種格式,並使用UNION ALL結合。

select to_date(created_at,'format_specifier1') as created_at , id from table 
where created_at NOT Like '%T%' 

UNION ALL 

select to_date(created_at,'format_specifier2') as created_at , id from table 
where created_at Like '%T%' 

所以你需要弄清楚的是2格式說明字符串。 (我目前無法訪問postgre DB)

相關問題