2017-02-01 2 views
2

Ich habe Daten in einer Postgres-Datenbank. Das Problem ist, dass sie in einem Stringfeld gespeichert sind und ähnliche Werte haben wie: "1187222400000" (was dem 07.08.2007 entsprechen würde). Ich möchte sie in lesbare Daten konvertieren usind einige SQL to_date() Ausdruck oder etwas ähnliches, aber nicht mit der richtigen Syntax zu kommen, damit es funktioniert.Konvertieren Zeichenfolge Zeitstempel in Datum

+0

Können Sie einen zweiten Wert mit dem zugehörigen Datum angeben? – Vic

+0

Könnte der Wert von "1187222400000" oben tatsächlich "2007-08-15 17:00:00" entsprechen? ? – Vic

+0

Das ist möglich, ich habe die gleichen Daten in einer anderen Datenbank, wo nur das Datum angezeigt wird, aber es ist durchaus möglich, dass hinterher d es gibt auch eine Zeit – oddpodm

Antwort

1

Es gibt wirklich nicht genug Informationen hier für eine Schlussfolgerung, also schlage ich diesen "wissenschaftlichen-wild-ass-rate" vor, um dein Puzzlespiel zu lösen. :)

Es erscheint Diese Nummer ist UNIX 'Epochenzeit' in Millisekunden. Ich zeige dieses Beispiel, als ob Ihr String-Feld den willkürlichen Namen "epoch_milli" hätte. In postgresql können Sie es zu einem Zeitstempel konvertieren diese Anweisung:

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + epoch_milli * INTERVAL '1 millisecond'; 

oder mit diesem built-in postgresql function:

SELECT to_timestamp (epoch_milli/1000)

entweder von denen, für das Beispiel ‚1187222400000 ‘erzeugt das Ergebnis

"2007-08-15 17:00:00-07" 

Sie können mit ganz wenigen Werten in ähnlicher Weise dazu ausgewählt einige Ihrer eigenen sleuthing tun:

SELECT to_timestamp(epoch_milli/1000)::DATE 
FROM (VALUES (1187222400000),(1194122400000)) AS val(epoch_milli); 

"Nun, bollocks, Mann. Ich will nur das Datum „Punkt genommen

werfen Sie einfach den Zeitstempel auf ein Datum, die überschüssigen Bits zu verwerfen..

SELECT to_timestamp(epoch_milli/1000)::DATE 

Natürlich ist es möglich, dass dieser Wert eine Umwandlung ist oder relativ zu einem anderen Wert, daher die Anforderung für einen zweiten Beispieldatenpunkt

+0

Antwort. Vielen Dank. Tatsächlich scheint es bei CARTO einige Dinge zu geben, die anders sind, aber Ihr to_timestamp() hat mich in die richtige Richtung geschickt. Ich musste zuerst in biginteger und dann in timestamp konvertieren, aber das Ergebnis ist perfekt: to_timestamp (NULLIF (date_field, '') :: bigint/1000) – oddpodm

Verwandte Themen