2016-06-26 11 views
10

Sono abbastanza sicuro la seguente query utilizzato per lavorare per me su Presto:Presto - data statica e timestamp in cui la clausola

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; 

ora quando l'eseguo (su Presto 0,147 su EMR) ottengo un l'errore di cercare di assegnare varchar a data/timestamp ..

posso farlo funzionare utilizzando:

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; 

ma ci si sente sporca ... c'è un modo migliore per fare questo?

risposta

16

A differenza di altri database, Presto non converte automaticamente tra varchar e altri tipi, anche per costanti. Il cast funziona, ma un modo più semplice è quello di utilizzare il tipo di costruttori:

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' 

si possono vedere esempi per i vari tipi qui: https://prestodb.io/docs/current/language/types.html

-2

Solo un pensiero veloce .. hai provato a omettere i trattini nella tua data? prova 20160623 invece di 2016-06-23.

Ho riscontrato qualcosa di simile con il server SQL, ma non ho usato Presto.

+0

no non funziona .. ora interpreta la data come intero ('=' non può essere applicato fino alla data, numero intero) –

Problemi correlati