- - PR -
【Postgresql】 日にちをまたぐ場合の抽出
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-10-22 02:44
はじめまして。
Postgresql7.4.19を使用しています。 深夜営業店舗の日にちをまたぐ営業時間の抽出で悩んでます。 例えば営業時間が朝の9時から深夜の3時までの場合のSELECT方法を教えてほしいのですが。 他サイトにも同じ質問がありましたが、MySQLのため、改めて質問させていただきました。 下記のようなデータがありますが、 shop |open_time |close_time --------------------------------- A |09:00 |21:00 -------------------------------- B |17:00 |02:00←深夜2時 A店の場合の抽出はできますが、 $date = date("H:i"); SELECT * FROM shop WHERE open_time<'$date' AND close_time>'$date'; B店の抽出で悩んでいます。 お手数ですがご教授いただきますようお願いいたします。 [ メッセージ編集済み 編集者: どんどん。 編集日時 2008-10-22 02:45 ] [ メッセージ編集済み 編集者: どんどん。 編集日時 2008-10-22 02:49 ] | ||||||||
|
投稿日時: 2008-10-22 08:47
何をしたいのかいま一つわかりません。
例のSQLも$dateが何を示すのかわかりません。 Time型ではなくて、Date型にしてある特定の日(1970年1月1日:エポック)の 時刻としてデータベースには入れておけばよいのでは? | ||||||||
|
投稿日時: 2008-10-22 09:42
すいません。補足します。
現在営業中のお店を検索するSQLを作成していますが、 $date = date("H:i"); //現在の時間 SELECT * FROM shop WHERE open_time<'$date' AND close_time>'$date'; (open_time、close_timeの型:TIME WITHOUT TIME ZONE) 例えば 20時にSQLを実行した場合、A店の場合は抽出されますが、B店は抽出されません。 B店も抽出されるSQL文をご教授いただきたいのですが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-10-22 09:55
こういうデータにしちゃう。
で、深夜3時を27時としてクエリを実行する。 -----以下、追加 特定の時間でしか検索しないのなら、こっちでもいいか。
------ さらに考察 上の方法だと 0:00 で検索できないから、下のほうがいいかも。 検索に使う時間は、0:00 〜 23:59 の範囲にするという条件をつけて(24:00は0:00とみる) [ メッセージ編集済み 編集者: rain 編集日時 2008-10-22 10:07 ] [ メッセージ編集済み 編集者: rain 編集日時 2008-10-22 10:28 ] | ||||||||
|
投稿日時: 2008-10-22 09:58
open_time が 17:00 で
close_time が 次の日の 18:00 になるような事は 全く考慮しなくて大丈夫ですか? | ||||||||
|
投稿日時: 2008-10-22 10:08
ご意見ありがとうございます。
Kingさま>> 24時間以上営業の場合は考慮しません。 | ||||||||
|
投稿日時: 2008-10-22 10:21
postgresql の文法をよく知らないのでアイデアだけ。
基本は、rain さんのアプローチがいいと思いますが、 すでにデータが決まってしまっているのであれば、 そういうデータになるように加工してやるのがいいかと 思います。 1.if や、case のような文法がある場合。 開店時間と、閉店時間を比較して、 開店時間の方が早い場合は、そのまま、HH:MM の形式に文字列化。 閉店時間の方が早い(日をまたいで営業してる)場合は、HH に 24 を足して、 HH:MM の形式に文字列化。 比較時間も HH:MM の形式にして、文字列で比較する。 2.if や、case のような文法がない場合。 開店時間と、閉店時間を引数にして、上記のようなものを関数で作る。 | ||||||||
|
投稿日時: 2008-10-22 10:25
rainさま>>
24:00の場合、データをINSERTするときに、 23:59:59以上の登録ができるのでしょうか? |