[ロ]TIMESTAMP型の範囲指定について

このエントリーをはてなブックマークに追加
はてなブックマーク - [ロ]TIMESTAMP型の範囲指定について
Facebook にシェア
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]

PostgreSQLのTIMESTAMP型で範囲指定をして情報を変更する必要に迫られたときに疑問が発生。
調べていたらDATETIME型/TIMESTAMP型の展開と WHERE句の範囲指定がかなり参考になる。ただ、気になる点があった。


具体的に自分がやりたかったのは、OpenBazaarでordersテーブルのdate_purchasedカラムが2005年9月16日及び、それ以前の場合でorders_statusが3だった場合4に変更したい。という要望。
ちなみに調査に使ったPostgreSQLのバージョンは8.0.3です。
単純な話なんだが、9月16日の日付を全て選択したい場合には

WHERE date_purchased<= '2005-09-16'

ではダメ。何故かというと、先ほどのサイトにも書いてあるように、

予想通り、2004-08-26 は 2004-08-26 00:00:00 に展開された。

だから、

WHERE date_purchased<= '2005-09-16'

WHERE date_purchased<= '2005-09-16 00:00:00'

に展開される。
だから、「2005-09-16 01:00:00」のデータは範囲外になってしまう。当たり前だけど。
ということで、結論としては

update orders set orders_status = 4 where orders_status = 3 AND date_purchased < '2005-09-17';

となりました。

Popular Posts:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*