2016-09-08 2 views
3

Ich habe eine ganze Zahl 20160115201307 und ich möchte als Timestamp konvertieren 2016-01-15 20:13:07 UTC.Ich habe Timestamp (Datum) versucht, aber es gab falsches Datum als 1970-08- 22 08:01:55 UTC. Jeder schlägt vor, welche Frage ich verwenden muss?Bigquery - Ganzzahl zu Timestamp

Antwort

1

Das ist wahrscheinlicher eine Zeichenfolge, keine Ganzzahl, und Sie müssen regulären Ausdruck verwenden, um die Zeichenfolge in Komponenten zu analysieren.

SELECT ds, 
    TIMESTAMP(REGEXP_REPLACE(ds, r'(....)(..)(..)(..)(..)(..)', r'\1-\2-\3 \4:\5:\6')) ts 
FROM (SELECT '20160115201307 ' ds) 

kehrt

+-----+----------------+-------------------------+--+ 
| Row | ds    | ts      | | 
+-----+----------------+-------------------------+--+ 
| 1 | 20160115201307 | 2016-01-15 20:13:07 UTC | | 
+-----+----------------+-------------------------+--+ 
+0

Ich habe 900 Datensätze in einer table.how dies für alle Datensätze zu bewerben? – nikhil

+0

Sie können eine Abfrage ausführen, die die Umwandlung durchführt, und sie in die gleiche Tabelle zurückschreiben. Sie können unter den Optionen in der BQ-Webbenutzerschnittstelle sehen, dass Sie dieselben Tabellenziele angeben können. Stellen Sie sicher, dass Sie alle benötigten Spalten enthalten. – Pentium10

+0

Also, muss ich diese Abfrage für 900 mal durchführen? – nikhil

0

Mit Standard-SQL:

SELECT PARSE_TIMESTAMP('%Y%m%d%H%M%S', CAST(20160115201307 AS STRING)) 

Mit 900 Datensätze in einer Tabelle:

SELECT PARSE_TIMESTAMP('%Y%m%d%H%M%S', CAST(col AS STRING)) 
FROM `dataset.table` 

Standard-SQL zu aktivieren:

+0

Danke für die Hilfe !! Aber ich bekomme den Fehler "Fehler beim Parsen von String" 0 "" wenn ich Abfrage ausführen ... – nikhil

+0

Ich habe einige Timestamp Felder benannt als 0 in einigen Datensätzen. – nikhil

+0

Bedeutet ein Wert von 0 'NULL'? In der Besetzung könntest du stattdessen 'CAST (IF (col = 0, NULL, col) AS STRING)' machen. –