web-dev-qa-db-ja.com

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;

今、それを実行すると(EMRのPresto 0.147で)日付/タイムスタンプに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;

しかし、それは汚れていると感じています...これを行うためのより良い方法はありますか?

30
Tal Joffe

他の一部のデータベースとは異なり、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://prestosql.io/docs/current/language/types.html

52
David Phillips