2016-06-02 4 views
0

Ich habe ein ziemlich Standard Datum als String, die ich auf ein Datum Typen analysieren müssen:PostgreSQL nicht in der Lage Zeichenfolge bisher zu analysieren to_date mit()

"2016-06-01T23:34:25+00:00" 

I 'YYYY-MM-DDTHH24:MI:SS' als Format Maske bin mit und diese Abfrage, um zu versuchen, das Datum zu erhalten und analysieren:

SELECT to_date('last_updated_on', 'YYYY-MM-DDTHH24:MI:SS') 
AS last_updated_on FROM locations 
limit 1 

Was passiert ist, ich bekomme diese Fehlermeldung:

ERROR: invalid value ":2" for "MI" 
SQL state: 22007 
Detail: Value must be an integer. 

Ich habe in der Dokumentation und auf SO nach der Ursache gesucht und bin total verwirrt.

Ich bin mit PostgreSQL 9.4

Antwort

2

Surround die T im String-Format mit "". Wenn der Zeitteil des Datums beibehalten werden muss, verwenden Sie to_timestamp().

SELECT to_date('last_updated_on', 'YYYY-MM-DD"T"HH24:MI:SS') 
AS last_updated_on FROM locations 
limit 1 

Konvertieren von aktuellen Zeitstempel

SELECT to_timestamp('last_updated_on', 'YYYY-MM-DD"T"HH24:MI:SS') 
AS last_updated_on FROM locations 
limit 1 
+0

Danke! Ich vermutete, dass "T" der Schuldige war, wusste aber nicht, wie man es als buchstäbliches "T" definiert. –

4

Das Problem scheint die T n der Mitte der Saite zu sein. Dies scheint Schlepptau Arbeit:

SELECT to_date(replace('2016-06-01T23:34:25+00:00', 'T', ''), 'YYYY-MM-DD HH24:MI:SS') 

aber Sie wollen wahrscheinlich to_timestamp():

SELECT to_timestamp('2016-06-01T23:34:25+00:00', 'YYYY-MM-DD HH24:MI:SS') 

Beachten Sie auch, dass Sie einfache Anführungszeichen um last_updated_on haben. Das bedeutet, dass es als Zeichenfolge und nicht als Spaltenname interpretiert wird.

+0

Ehrfürchtig. Vielen Dank! Ja, ich habe das 'last_updated_on' in meine Frage geschrieben. Der Wert, der dort eingeht, kommt von einem jsonb-Wert, den ich herausholte, um zu versuchen, die Bedeutung der Frage zu klären. –

Verwandte Themen