2016-07-05 5 views
0

Ich stieß auf eine Spalte, die Datumsangaben (als Text gespeichert) in 2 verschiedenen Formaten enthält. Um to_date() zu verwenden, muss das Format angegeben werden, damit es nur mit einigen von ihnen funktioniert.Konvertieren zu Datum, wenn verschiedene Formate in der gleichen Spalte

Gibt es eine Möglichkeit, beide Formate parallel mit einem SELECT zu konvertieren?

 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

Es wäre möglich, einen CASE ... WANN konstruieren, vorausgesetzt postgresql unterstützt es. – Michal

+0

Was willst du, nur den Datumsteil oder den ganzen Zeitstempel? – jarlh

+2

Diese Formate sind nicht so unterschiedlich, postgresql kann sie automatisch identifizieren, sie einfach in 'Zeitstempel mit Zeitzone' umwandeln, z. 'wähle created_at :: timestamptz'. – pozs

Antwort

0

(Unter der Annahme, dass es nur zwei verschiedene Arten von Datumsformate) Behandeln Sie die zwei Formate getrennt und kombinieren ALL eine UNION verwenden.

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%' 

so alles, was Sie herausfinden müssen, ist die 2 Format Specifier Strings. (Ich habe gerade keinen Zugriff auf eine Postgre-DB)

Verwandte Themen