
PostgreSQLでDATE型のフィールドにnow()でSELECTする時の注意
Category PostgreSQL
Date 2010年05月11日
データベースのデータを抽出する際、今現在有効なデータを取得するというケースは多々あるかとっ。
そこで、now()を用いて取得すると、思ってたのと少し違う挙動をしちゃいます。
PostgreSQLのデータベースに、「start_date」「end_date」という共にDATE型のフィールドを持つテーブル「hoge」があるとします。
hoge | ||
---|---|---|
id | start_date | end_date |
1 | 2010-5-1 | 2010-5-11 |
2 | 2010-5-12 | 2010-5-31 |
SELECT * FROM hoge WHERE start_date <= now() AND end_date >= now()
としてクエリを投げます、今日は2010年5月11日です。
そうしたとき、[id:1]が返ってくるのを期待するのですが、実際はどっちも返ってきません。
ぱっと見、[id:1]のend_dateにぎりぎり入っていると思うんですけどね?
ですが、PostgreSQLはDATE型と比較する際に、内部的にはタイムスタンプで比較していて、
‘2010-5-11 00:00:00’ >= ‘2010-5-11 23:32:00’
のようになることで、[id:1]が返ってこないのかなーと。
DATE型を比較する時は
end_date >= TO_CHAR(now(), ‘YYYY-MM-DD’)
又は
end_date >= CAST(now(), AS DATE)
のようにDATE型にあう文字列にしてあげるか、CASTするかしてあげる必要があるようです。
ご注意をば。

- 脱出ゲームを作成しました
- Studio Yuksのサイト制作のお手伝いをさせていただきました
- よみがな.netを公開しました
- Slug or PostIDプラグインがバージョン1.0になりました。
- お問い合わせフォームへの連投を防ぐ方法+α
- phpMyAdminのsetup.phpに脆弱性があるみたいです
- 1つのデータベースに複数のWordPressをインストールする方法
- 仕事とプライベートで使っているマウスをご紹介
- WordPressでiFrameが消えないようにする記述が必要なくなったようです
- CSS3で横並びのメニューを簡単に作る方法
- Windows7にIllustratorCS2入れたけど日本語入力ができなかった
- FFFTPでファイルをダウンロードしたのに、ファイルがその場所になかった時
- PHPでurlの日本語パラメータをGETで受け取ると文字化けする場合
- JavaScriptでブラウザのテキスト選択を解除する
- お問い合わせフォームへの連投を防ぐ方法+α
- PHPのSmartyでゼロパディングする
- WordPressでiFrameが消える時の解決方法
- CSS3で横並びのメニューを簡単に作る方法
- MT5インストール時に「LWP::UserAgentがありません」とエラーが出てインストールできない時
- WordPressでiFrameが消えないようにする記述が必要なくなったようです
- HTML+CSS (8)
- JavaScript (12)
- PHP (21)
- PostgreSQL (4)
- WordPress (8)
- WordPressプラグイン (1)
- Movable Type (13)
- Photoshop (2)
- Illustrator (2)
- Firefox (5)
- ツール (2)
- 雑記 (23)
- 未分類 (3)
- Android (1)
コメントを残す