2015年3月2日月曜日

oracleでdate型の検索

Oracleでdate型の検索をするのに、lddateがdate型の変数だとして、
where to_char(lddate)='01-APR-15'
とやると、あたりまえのことながらかなり遅い。
(lddateが文字列に変換されて比較されてそうだから。私みたいなド素人でもそう思う)
ところが、
where lddate=to_date('01-APR-15')
とやると、一件もヒットしなくなる。
どうもdate型を上記のように使うと00:00:00が暗黙のうちに仮定されてしまうからのよう。
結局時間を自分で指定してやるのが正解で、
where lddate >=to_date('01-APR-15 00:00:00','DD-MON-YY HH24:MI:SS')
and lddate <=to_date('01-APR-15 23:59:59','DD-MON-YY HH24:MI:SS')

みたいにするのがいいみたい。date型は秒より小さい値をどうしてるんだろう?という気はする。
本当は
and lddate <to_date('01-APR-16 00:00:00','DD-MON-YY HH24:MI:SS')
のほうが正しいんだろうけど。

0 件のコメント:

コメントを投稿