• ベストアンサー

PostgreSQLのtimestamp型で時間(分)を抽出したい

PostgreSQLのあるテーブルで「開始時刻」と「終了時刻」というフィールドがあり、timestamp with timezone(例:2008-07-31 07:00:00+09)でデータを持っています。 例えば、日付に関係なく13:00から15:00までのデータを抽出したい場合、SQLのWHERE句にはどのように記述すればよろしいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

それなら早く言ってよ(笑) to_char(開始時刻, 'HH24:MI') >= '13:30' AND to_char(終了時刻, 'HH24:MI') <= '15:40' http://www.postgresql.jp/document/pg734doc/user/functions-formatting.html 参考URLの文章の中に関連事項のリンクもあったはず。

sugar416
質問者

お礼

大変失礼いたしました。(汗) 説明不足で申し訳ありません。 回答にあったとおりの方法で思い通りの結果が得られました! 併せて参考URLも熟読したいとしたいと思います。 ありがとうございました。

その他の回答 (2)

回答No.2

>例:13時30分から15時40分等 そういった要件もあるなら、最初に提示すれば#1さんがアドバイスしてくれたと思いますよ? to_char関数 date_trunc関数 などで調べてみては?

sugar416
質問者

お礼

私の説明不足でした。 >to_char関数 >date_trunc関数 上記の関数はWebで結構ヒットしたのですが、WHERE句での実例集が少なくイメージできませんでした(汗) 失礼いたしました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

【例】 date_part('hour',開始時刻) between 13 and 15 http://www.postgresql.jp/document/pg734doc/user/functions-datetime.html あんまり古いバージョンだと関数が使えないかも知れません。 最近のものなら大丈夫でしょう。当方は8.2で確認済みです。

sugar416
質問者

補足

早速のご回答ありがとうございます。 当方のは8.1ですが構文は使用できました。 Where date_part('hour',開始時刻) >= 13 AND date_part('hour',終了時刻) < 15 で13時から15時までのデータは抽出できたのですが、分も合わせて抽出するにはどのようにしたらよいか教えていただけますでしょうか? 例:13時30分から15時40分等 WEBで調べてみたのですがdate_partの引数「hour」のところで時間+分の 値がなかったので、どう指定したらいいかわかりませんでした。 よろしくお願いいたします。