2016-06-26 24 views
10

我敢肯定,下面的查询用来为我工作在普雷斯托:现在普雷斯托 - 静态日期和时间戳在where子句

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; 

当我运行它(在普雷斯托0.147对EMR)我得到一个试图分配VARCHAR日期/时间戳记错误..

我可以使它工作使用:

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; 

但感觉脏兮兮 有没有更好的方式来做到这一点?

回答

16

与其他数据库不同,Presto不会自动在varchar和其他类型之间进行转换,即使对于常量。演员的工作,但一个简单的方法是使用类型构造:

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' 

你可以看到各类这里的例子:https://prestodb.io/docs/current/language/types.html

-2

只是一个快速的想法..你有没有试过在你的约会时忽略破折号?请尝试20160623而不是2016-06-23

我遇到了类似SQL服务器的东西,但没有使用Presto。

+0

没了不行..现在它解释日期作为整数( '='不能应用于日期,整数) –