2016-11-01 3 views
0

event_date enthält Zeitstempel, die als Strings gespeichert sind.Vergleichen Sie Zeitstempel, die als Strings gespeichert sind, mit einem string-formatierten Datum

1382623200 
1382682600 
1384248600 
... 

Wie kann ich SELECT Zeilen, in denen event_date weniger als eine Zeichenfolge formatiert Datum ist? Das ist mein bester Versuch:

SELECT * 
FROM [analytics:workspace.events] 
WHERE TIMESTAMP(event_date) < PARSE_UTC_USEC("2013-05-02 09:09:29"); 

ich alle Zeilen erhalten, unabhängig davon, an welchem ​​Tag ich passieren zu PARSE_UTC_USEC()

Antwort

0

unten Versuchen. Hope this

SELECT event_date, TIMESTAMP(event_date) as ts 
FROM -- [analytics:workspace.events] 
(
    SELECT event_date FROM 
    (SELECT '1382623200' AS event_date), 
    (SELECT '1382682600' AS event_date), 
    (SELECT '1384248600' AS event_date) 
) 
WHERE TIMESTAMP(event_date) < PARSE_UTC_USEC("2013-10-25 07:30:00") 

oben hilft, ist nur Beispiel - Sie Ihren Tisch im wirklichen Leben verwenden sollte:

SELECT event_date, TIMESTAMP(event_date) as ts 
FROM [analytics:workspace.events] 
WHERE TIMESTAMP(event_date) < PARSE_UTC_USEC("2013-10-25 07:30:00") 
+0

Es sind nicht nur 3 Ereignisdaten, also kann ich nicht alle auflisten. Die Liste geht weiter. – user1283776

+0

Ich habe nur 3 Ereignisse für Sie als Beispiel verwendet, um das "Testen" zu vereinfachen. Siehe Ergänzung zu meiner Antwort –

0

Es sieht aus wie die event_date Strings repräsentieren Unix Sekunden. Versuchen Sie, diese standard SQL mit (deaktivieren Sie „Use Legacy-SQL“ unter „Optionen anzeigen“):

WITH T AS (
    SELECT x, event_date 
    FROM UNNEST(['1382623200', 
       '1382682600', 
       '1384248600']) AS event_date WITH OFFSET x 
) 
SELECT * 
FROM (
    SELECT * REPLACE (TIMESTAMP_SECONDS(CAST(event_date AS INT64)) AS event_date) 
    FROM T 
) 
WHERE event_date < '2013-05-02 09:09:29'; 

Die Unterabfrage wandelt die event_date Zeichenfolge in einen Zeitstempel mit der REPLACE Klausel.

Verwandte Themen