• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:時間内かどうかの抽出)

時間内かどうかの抽出

このQ&Aのポイント
  • 現在時刻が設定した時間内かどうかを判定する方法を教えてください。
  • 範囲が≦で囲まれる場合は問題ありませんが、≧の場合、どのように条件を書けば良いか分かりません。
  • 抽出時の時間は何時になるのでしょうか?また、現在時刻が1:00の場合、1:00は0日か1日ですか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

場合分けだけですね まずstart_timeがend_timeより小さければ普通に 現時刻がstart_timeとend_timeの間にあればOK つぎにstart_timeがend_timeより大きければ日付をまたぐのと考えられるので 現時刻がstart_timeより大きいか、限時刻がend_timeより小さい必要があります。 それを踏まえるとこんな感じ //準備 create table t_time(id int ,start_time time,end_time time); insert into t_time values(1,'1:00:00','16:00:00'),(2,'14:00:00','1:00:00'); //結果 select * from t_time where (start_time<end_time and (@now:=CURTIME()) between start_time and end_time) or (start_time>end_time and (@now > start_time or @now<end_time)); テストのためにCURTIME()のところを '00:00:00'や'15:00:00'などに書き換えてやると解ると思います

hornest
質問者

補足

すごい!天才ですか貴方は!(;゜Д゜)! 書いて頂いた事は、考えていたのですが、PHPで条件判断してどうこうと ややこしい事を考えていたのですが、SQLでこんな事が実現できるのですね! ですが、回答を頂いて恐縮なのですが教えていただいたコードを書いても 下記のようなエラーが出ます。 #1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '&gt;' 文字コードがおかしいようなのですが、私には何が問題なのか分かりません お手数ですが再度、ご教示いただけませんでしょうか。お願いします。

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

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ごめんなさい。 私のphpMyAdminの環境だと問題なさそうです。 set names utf8; 的な処理を先に入れれば通るかもしれないですが なんともいえません。

hornest
質問者

お礼

本当にありがとうございました。 どうやら、ユーザ変数を使うとエラーが出るようです。 それも5.1だと正常に動作しましたが、5.5だと無理でした。 ともあれ、本当に助かりました、ありがとうございました!!

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>#1267 - Illegal mix of collations コードが違うテーブルを結合したりする際のエラーっぽいですね 今回挙げた例だと結合のロジックはないように見えますが なにか拡張して使っているのでしょうか?

hornest
質問者

補足

早急な返信ありがとうございます! まだ自分の環境に合わせてコードを変更した訳ではなく 提示していただいたコードをphpMyAdminのSQLで実行 しただけです。 (1)create table t_time(id int ,start_time time,end_time time); insert into t_time values(1,'1:00:00','16:00:00'),(2,'14:00:00','1:00:00'); テーブルが作成される。 (2)select * from t_time where (start_time<end_time and (@now:=CURTIME()) between start_time and end_time) or (start_time>end_time and (@now > start_time or @now<end_time)); 以下のエラーが表示される。 #1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '&gt;' 特に何かを結合しているわけではありません。 照合順序は[utf8_general_ci]です。

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

関連するQ&A