• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:時間の比較をしたい)

時間の比較をしたい

このQ&Aのポイント
  • 現在時刻が期間AからBに該当する場合にデータがHITするようなSQLを作りたいのですが、うまくいきません。where 'now' between A and B;ではうまくいきませんでした。何か良いSQLはありませんか?
  • 希望通りの動きをするなら、よろしくお願いします。
  • データの時間比較を行いたい場合、現在時刻が期間AからBに該当するかどうかを確認するSQLが必要です。ただ、既存のクエリではうまくいかず、新しいSQLの作成が必要です。

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

  • ベストアンサー
  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.3

TIME型は24:00:00までしか入らないのですね。 ごめんなさい。 表示時間が0時に掛かる場合の検索条件をORで加えてみてはどうでしょう。 select * from test where (a <= b and a <= CURRENT_TIME AND CURRENT_TIME < b) or (a > b and (CURRENT_TIME < b or a <= CURRENT_TIME)); /* テストデータ */ insert into test values ('21:00:00', '2:00:00'); -- 9時から24時まで表示 insert into test values ('9:00:00', '0:00:00'); -- 0時から9時まで表示 insert into test values ('0:00:00', '9:00:00'); insert into test values ('15:00:00', '20:00:00'); /* 結果(試験時、22時30分)*/ a | b ----------+---------- 21:00:00 | 02:00:00 09:00:00 | 00:00:00 (2 rows)

参考URL:
http://www.postgresql.jp/document/pg824doc/html/datatype-datetime.html#DATATYPE-DATETIME-INPUT
punipunipuniko
質問者

お礼

ありがとうございます!! おかげさまで 希望通りの動きをすることができました!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.2

PostgreSQL8.2.4です。 CURRENT_TIMEで現在の時間が得られます。 -- テスト用のテーブル create table test ( a time, b time ); -- テストデータ insert into test values ('9:00:00', '12:00:00'); insert into test values ('15:00:00', '20:00:00'); insert into test values ('9:00:00', '0:00:00'); insert into test values ('9:00:00', '24:00:00'); -- クエリ cre-at=> select * from test where a < CURRENT_TIME AND CURRENT_TIME < b; -- 結果(これを書いている時は12時前なので) a | b ----------+---------- 09:00:00 | 12:00:00 09:00:00 | 24:00:00 (2 rows) bが0時を過ぎる時は、「24時」のようにデータを挿入しないと検索されませんね。

参考URL:
http://www.postgresql.jp/document/pg824doc/html/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
punipunipuniko
質問者

補足

解答ありがとうございます さっそく試してみたのですが insert into test values ('35:00:00', '12:00:00'); 上記のようにすると ERROR: date/time field value out of range: "35:00:00" となってしまいます。 insert into test values (to_timestamp('35:00:00','HH24MISS'),'12:00:00'); 上記のようにすると自動で変換されてデータは「11:00:00」扱いとなってしまいました データの型はtime型です データがそもそも入れれないので 動作を試すことができません。

すると、全ての回答が全文表示されます。
回答No.1

>現在時刻が17時なら >データ(2)(3)が抽出 データ例から判断すると、矛盾していますが? >where now between A and B; nowは日時ですから、time型と直接比較できません。 time型なら、20時~6時と行った場合、条件を二つに分ける必要があります。20:00:00~23:59:59と、00:00:00~06:00:00でです。timestamp型なら、こういった操作は不要ですが、別の日のデータはヒットしなくなります。 >何か良いSQLはありませんか? >それ以外のデータ型でもいいです >希望通りの動きをするなら・・・ 具体的なアドバイスが欲しいなら、やりたいことをもっと具体的にかつ正確に示してください。

punipunipuniko
質問者

補足

>現在時刻が17時なら >データ(2)(3)が抽出 は間違いですすみません。 やりたいのは 現在時刻が設定時刻Aから設定時刻Bの間ならHIT と言うことです。 設定時刻ABは共に自由に設定できて 入力できる数値は0~23(時)です (もしくは24HMMSS) Aが0時 Bが23時の設定の場合もあれば Aが22時 Bが2時(26時)の場合もあります 設定期間内ならデータを抽出したいのです。

すると、全ての回答が全文表示されます。

関連するQ&A