2016-10-05 5 views
5

ich auf presto bin und haben ein Datum als varchar formatiert, die wie folgt aussieht -Presto SQL - Konvertieren ein Datum Zeichenfolge Datumsformat

7/14/2015 8:22:39 AM 

ich die presto docs haben gesucht und versucht, verschiedene Dinge (cast, date_format, benutze split_part um zu analysieren und dann zu casten) und bekomme dies nicht um in ein Datumsformat zu konvertieren das ich mit Funktionen wie date_diff benutzen kann.

Ich habe versucht:

cast(fieldname as timestamp) 
date_format(fieldname, '%Y-%m-%d %T) 

Beide geben mir einen Fehler wie diese

'Value cannot be cast to timestamp: 3/31/2016 6:05:04 PM' 

Wie kann ich das Format konvertieren?

+0

Warum 'CAST' funktioniert nicht? Wie hast du es versucht, kannst du das hinzufügen? –

+0

@ Prdp Sample-Syntax hinzugefügt – Moosa

+0

Ich denke, Problem ist mit Datumsformat. Kannst du das Format wie dieses '2016-03-31 6:05:04 PM' ändern und es werfen? –

Antwort

-1

versuchen Sie dies:

SELECT convert(datetime, '7/14/2015 8:22:39 AM', 101) 

Ausgang:

2015-07-14 08: 22: 39,000

+0

sieht nicht so aus, dass dies auf Presto funktioniert. es heißt Konvertierungsfunktion nicht registriert. – Moosa

0

SQL 2003-Standard das Format wie folgt definiert:

<unquoted timestamp string> ::= <unquoted date string> <space> <unquoted time string> 
<date value> ::= <years value> <minus sign> <months value> <minus sign> <days value> 
<time value> ::= <hours value> <colon> <minutes value> <colon> <seconds value> 

Es gibt einige Definitionen dazwischen, die nur auf diese zurückverknüpfen, aber kurz YYYY-MM-DD HH:MM:SS mit optionalen .mmm Millisekunden ist erforderlich, um an allen SQL-Datenbanken zu arbeiten.

+0

Ja, aber es hat etwas mit der AM/PM zu tun. Wenn ich 'Cast' ('2016-03-31 6:05:04 PM' als Zeitstempel) auswähle 'funktioniert es nicht. aber wenn ich am/pm entferne und '' cast ('2016-03-31 6:05:04' als Zeitstempel) '' tue, dann funktioniert es. aber ich brauche die am/pm oder konvertieren zu 24 Stunden. – Moosa

+0

Wenn Sie darauf bestehen, den Nicht-Standard '3/31/2016 6:05:04 PM' gemäß der Dokumentation zu verwenden, lautet das Format'% c /% e /% y% r'. Sehen Sie sich https://prestodb.io/docs/current/functions/datetime.html – coladict

+0

an, so sind meine Daten formatiert. Ich bin bereit zu formatieren, weiß aber nicht wie. Das ist meine Frage. nach dem obigen Kommentar, wenn ich 'date_format ('7/22/2016 6:05:04 PM', '% c /% e /% y% r')' das gibt mir auch einen Fehler – Moosa

11

Ich fand es heraus. Das Folgende funktioniert bei der Konvertierung in ein 24-Stunden-Datumsformat.

select date_parse('7/22/2016 6:05:04 PM','%m/%d/%Y %h:%i:%s %p') 
Verwandte Themen