2016-06-26 7 views
10

Ich bin mir ziemlich sicher, dass die folgende Abfrage für mich auf Presto arbeiten verwendet:Presto - statisches Datum und Zeitstempel in where-Klausel

select segment, sum(count) 
from modeling_trends 
where segment='2557172' and date = '2016-06-23' and count_time between '2016-06-23 14:00:00.000' and '2016-06-23 14:59:59.000'; 
group by 1; 

jetzt, wenn ich es laufen (auf Presto 0.147 auf EMR) bekomme ich eine Fehler zu versuchen, varchar zu Datum/Zeitstempel ..

ich kann es mit make arbeiten, um die Zuordnung:

select segment, sum(count) 
from modeling_trends 
where segment='2557172' and date = cast('2016-06-23' as date) and count_time between cast('2016-06-23 14:00:00.000' as TIMESTAMP) and cast('2016-06-23 14:59:59.000' as TIMESTAMP) 
group by segment; 

aber es fühlt sich schmutzig ... gibt es einen besseren Weg, dies zu tun?

Antwort

16

Im Gegensatz zu einigen anderen Datenbanken konvertiert Presto nicht automatisch zwischen Varchar und anderen Typen, auch nicht für Konstanten. Die Besetzung funktioniert, aber ein einfacher Weg, um die Typkonstruktoren zu verwenden:

WHERE segment = '2557172' 
    AND date = date '2016-06-23' 
    AND count_time BETWEEN timestamp '2016-06-23 14:00:00.000' AND timestamp '2016-06-23 14:59:59.000' 

Sie Beispiele für verschiedene Arten hier sehen können: https://prestodb.io/docs/current/language/types.html

-2

Nur ein kurzer Gedanke .. haben Sie versucht, die Striche in Ihrem Datum wegzulassen? Versuchen Sie 20160623 anstelle von 2016-06-23.

Ich stieß auf etwas ähnliches mit SQL-Server, aber nicht mit Presto.

+0

Nö nicht .. jetzt funktioniert es interpretiert das Datum als integer ('=' kann nicht auf Datum, ganze Zahl angewendet werden –