- PR -

【Postgresql】 日にちをまたぐ場合の抽出

投稿者投稿内容
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2008-10-22 10:35
どんどん。さんの要求に対する直接の解ではなくて申し訳ないのですが、ちょっとキーワードを思い出したので書き込み

つ時計代数

# ちょっと、検索してもいい所見つからないので引き続き検索
# といっても、仕事中なのであまり期待しないでね(汗
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-22 11:04
引用:

どんどん。さんの書き込み (2008-10-22 10:25) より:
rainさま>>

24:00の場合、データをINSERTするときに、
23:59:59以上の登録ができるのでしょうか?



つまり、PostgreSQL の time型を使っているのですね?
であれば24:00:00以上は持てませんので、
コード:

shop |open_time |close_time
---------------------------------
A  |09:00:00 |21:00:00
--------------------------------
B  |17:00:00 |23:59:59
--------------------------------
B  |00:00:00 |02:00:00


という持ち方でええんじゃないでしょうか。

----- 追記
でも「23時から1時まで使いたいんだけど、その時間に開いている店」で検索する場合は破綻するんだよなぁ。
その場合は日時型にするかいっそchar型にして、26:00:00を持てるようにしないとだめかなぁ。

[ メッセージ編集済み 編集者: rain 編集日時 2008-10-22 11:27 ]
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-10-22 12:44
基準の日付と、日またぎのゲタを考慮すればいけそう。
基準の日付はシステム日付かな

shop |open_time |close_time | day_step_offset
---------------------------------
A  |09:00 |21:00 | 0
--------------------------------
B  |17:00 |02:00 | 1

としておいて、

コード:
$date = date("yyyy/mm/dd H:i");
SELECT * FROM shop WHERE current_date + open_time<'$date' AND current_date+close_time + day_step_offset>'$date';



DB構造を改変できないのなら、日付またぎのゲタを、開店時刻と、終了時刻から求めればおk

でも、インデックス効かなそ...
どんどん。
会議室デビュー日: 2008/10/22
投稿数: 7
投稿日時: 2008-10-22 12:45
rainさま>>
文字型でやってみようとおもいます。



[ メッセージ編集済み 編集者: どんどん。 編集日時 2008-10-22 12:45 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-22 12:51
引用:

どんどん。さんの書き込み (2008-10-22 12:45) より:

rainさま>>
文字型でやってみようとおもいます。


あなたが、あなたにしかわからない諸々の条件を考慮した結果、それが最善だと判断したのであれば、私は何もいいません。

が、なんとなくそうではない気がするので「ほかにもっといい方法があるんじゃないかな」とだけ書いておきます。
どんどん。
会議室デビュー日: 2008/10/22
投稿数: 7
投稿日時: 2008-10-22 12:53
ページの更新をかけなかったので、気づきませんでした。すいません。

かずくんさま・rainさま>>
 ありがとうございます。
DB構造を改変することも考えて、再度やってみようとおもいます。
 ありがとうございました。
 

[ メッセージ編集済み 編集者: どんどん。 編集日時 2008-10-22 13:08 ]
RUN
常連さん
会議室デビュー日: 2007/10/05
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2008-10-22 20:04
引用:

どんどん。さんの書き込み (2008-10-22 10:08) より:
ご意見ありがとうございます。

Kingさま>>
24時間以上営業の場合は考慮しません。




ということなので

コード:
SELECT * 
FROM shop 
WHERE (open_time<'$date' AND close_time>'$date')
   OR (open_time<'$date' AND open_time>close_time)
   OR (open_time>close_time AND close_time>'$date')
; 



チューニングしてもう少し早い条件に出来るけど、
理解しにくくなると思うので、こんな感じで
_________________
質問する前に再確認
必要な情報はチャント揃っている?
出し忘れはしてないかい?
どんどん。
会議室デビュー日: 2008/10/22
投稿数: 7
投稿日時: 2008-10-24 20:15
ありがとうございます。
何とか解決できました。

スキルアップ/キャリアアップ(JOB@IT)