★データ解析備忘録★

ゆる〜い技術メモ

Treasure Dataの日付範囲指定はイコールを含むのか

Treasure Dataでクエリを書くとき、where句で日付指定をする場合が多いわけですが、範囲はイコールを含むのでしょうか?
以前書いた記事でちょろっと触れてそこに答えもあるのですが、イコールの有無に焦点を当てたものも欲しかったのでメモ。
< 時間 < なのか <= 時間 <= なのかは意外と重要です。
y-mattu.hatenablog.com
それと、公式のUDFマニュアルにも書いてあります。
docs.treasuredata.com


結論

そもそもTreasure Dataでは日付指定はTD_TIMR_RANGE関数を使うわけですが、結論としては以下の二つは同値です。

TD_TIME_RANGE(time,'2016-03-20 00:00:00', '2016-03-21 00:00:00', 'JST')
TD_TIME_RANGE(time,'2016-03-20', '2016-03-21', 'JST')

つまり
2016-03-20 00:00:00 >= time and time < 2016-03-21 00:00:00
となります。
TD_TIME_RANGE関数は、前半はイコールを含むけど後半はイコールを含まないみたいです。

また、ありがちな間違いとして例えば

TD_TIME_RANGE(time,'2016-03-20 00:00:00', '2016-03-20 23:59:59', 'JST')

としてしまうことがあります。実際僕もしばらくこれで書いていた時期がありました。
しかし、この書き方は2016-03-20 00:00:00 >= time and time < 2016-03-20 23:59:59を意味しているので23:59:59の値は取ることができません。
気を付けましょう。

ちなみに

たぶんTreasure Dataユーザーなら知ってると思いますが、Hive とPresto では文字列の囲み方が""''と違います。