Presto - статическая дата и метка времени в предложении where

Я почти уверен, что следующий запрос работал на меня в Presto:

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;

теперь, когда я запускаю его (на Presto 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;

но это кажется грязным... есть ли лучший способ сделать это?

2 ответа

Решение

В отличие от некоторых других баз данных, 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

Просто быстрая мысль.. Вы пытались опустить черточки в вашем свидании? пытаться 20160623 вместо 2016-06-23,

Я сталкивался с чем-то похожим с SQL-сервером, но не использовал Presto.

Другие вопросы по тегам