wake-up-neo.com

So konvertieren Sie einen Epochenzeitstempel in Standard SQL in ein Datum

Ich habe keine einfache Antwort darauf gefunden, als ich mich umsah, also dachte ich, ich würde sie hier aufstellen, falls jemand das gleiche Problem hätte wie ich, was eigentlich ein banales Problem hätte sein sollen.

Ich habe ReDash-Analysen mit Googles BigQuery verwendet und hatte Standard SQL in den Datenquelleneinstellungen aktiviert. Für meine Abfrage musste ich eine Zeitmarke (Unix-Zeit in Millisekunden) als Zeichenfolge in ein Date-Format konvertieren, damit ich die DATE_DIFF-Methode verwenden kann.

Als Beispiel ... "1494865480000" bis "2017-05-15"

Die Schwierigkeit bestand darin, dass Casting und Konvertierung übermäßig streng waren und es keinen angemessenen Weg für die Analyse gab. Sehen Sie sich meine Antwort unten an! (Lassen Sie mich wissen, ob ein SQL-Sensei einen beredten Weg kennt!)

6
Joseph Wolf

Verwenden Sie in Standard SQL die Funktion TIMESTAMP_MICROS zusammen mit EXTRACT(DATE FROM <timestamp>):

SELECT EXTRACT(DATE FROM TIMESTAMP_MILLIS(1494865480000))
8

Einfacher geht es mit TIMESTAMP_MILLIS ():

#standardSQL
SELECT DATE(TIMESTAMP_MILLIS(CAST("1494865480000" AS INT64)))

2017-05-15  
3
Felipe Hoffa

Nach langem Ausprobieren war dies meine Lösung:

DATE_ADD( DATE'1970-01-01', INTERVAL CAST( ( CAST( epochTimestamp AS INT64 ) / 86400000 ) AS INT64 ) DAY ) AS convertedDate

Das heißt, ich nahm den String, wandelte ihn in eine Ganzzahl um, dividierte ihn durch die Anzahl der Millisekunden pro Tag, verwendete dann eine DATE_ADD-Methode, addierte das Ergebnis zum Beginn der Epochenzeit und berechnete den resultierenden Tag.

Ich hoffe das spart einem anderen Junior etwas Zeit!

1
Joseph Wolf

Verwenden Sie UTC_USEC_TO_TIMESTAMP():

select UTC_USEC_TO_TIMESTAMP(postedon * 1000)

Sie können das Datum dann mit date() extrahieren:

select DATE(UTC_USEC_TO_TIMESTAMP(postedon * 1000))

Dies erfordert nicht, dass Sie das interne Format von Unix-Zeitstempeln kennen.

0
Gordon Linoff