![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
お世話になります。
いくら考えても正解が出てこないので、どうかご教示願えますでしょうか
▄█▀█●
使用SQL:
MySQL
要件:
現在時刻が、設定した時間内かどうかを判定したい。
例:
(1)1~16時の設定 :現在14時なら該当
(2)14時~1時の設定:現在0時なら該当
そもそも時間の”型”も、どれにすれば良いか解らず、現在”TIME”です。
start_time 14:00 end_time 01:00
(1)のように、範囲が≦で囲める場合は問題ないのですが (1時<16時)
(2)のように、≧の場合、どのように条件を書けば良いか分かりません。 (14時>1時)
では、(2)をTimeStampで設定した場合
start_time 0日14:00 end_time 1日01:00
のようになるかと思いますが、抽出時は何時になるのでしょうか?
例えば、上記設定がされているレコードに対し現在時刻が1:00の場合
start_time ≦ 1:00 ≦ end_time
とするかと思いますが、1:00というのは0日ですか1日ですか??
そうこう考え始めると何が何やら理解できなくなりました。
どうかヘルプください。。
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'などに書き換えてやると解ると思います
この回答への補足
すごい!天才ですか貴方は!(;゜Д゜)!
書いて頂いた事は、考えていたのですが、PHPで条件判断してどうこうと
ややこしい事を考えていたのですが、SQLでこんな事が実現できるのですね!
ですが、回答を頂いて恐縮なのですが教えていただいたコードを書いても
下記のようなエラーが出ます。
#1267 - Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,NUMERIC) for operation '>'
文字コードがおかしいようなのですが、私には何が問題なのか分かりません
お手数ですが再度、ご教示いただけませんでしょうか。お願いします。
No.3
- 回答日時:
ごめんなさい。
私のphpMyAdminの環境だと問題なさそうです。
set names utf8;
的な処理を先に入れれば通るかもしれないですが
なんともいえません。
本当にありがとうございました。
どうやら、ユーザ変数を使うとエラーが出るようです。
それも5.1だと正常に動作しましたが、5.5だと無理でした。
ともあれ、本当に助かりました、ありがとうございました!!
No.2
- 回答日時:
>#1267 - Illegal mix of collations
コードが違うテーブルを結合したりする際のエラーっぽいですね
今回挙げた例だと結合のロジックはないように見えますが
なにか拡張して使っているのでしょうか?
この回答への補足
早急な返信ありがとうございます!
まだ自分の環境に合わせてコードを変更した訳ではなく
提示していただいたコードを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 '>'
特に何かを結合しているわけではありません。
照合順序は[utf8_general_ci]です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- 英語 「名詞+形容詞/現在分詞/過去分詞+to不定詞の副詞的用法」の語順について 7 2022/09/22 05:27
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) 出退勤管理の遅刻・早退時間について 3 2023/08/10 15:33
- Windows 10 Windows10のメタデータの「メディアの作成日時」は、タイムゾーンによって表示が変わりますか? 3 2022/06/21 02:30
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PostgresSQLでの動的な計算
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
既存データをINSERT文にして出...
-
【SQL】他テーブルに含まれる値...
-
Accessの構成をコピーしたい
-
truncate tableを使って複数の...
-
sqlに記述できない文字
-
T-SQLで任意の箇所で強制終了す...
-
オラクルのUPDATEで複数テーブル
-
データ無し時は空白行にしたい...
-
pandasでsqlite3にテーブル作成...
-
CSVファイルを読み込んでテーブ...
-
右向き、左向きの速度が最大と...
-
データ削除とSQL*Loaderでのイ...
-
エクセルvbaでpostgresに接続を...
-
SQLの「句」とはなんですか
-
エラーを起こす方法
-
timestampのデータはどのように...
-
joinの場合のテーブル名の別名...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
group byで指定したカラム以外...
-
PostgresSQLでの動的な計算
-
1週間後の日付を求めたい
-
複数の条件での絞り込み検索の仕方
-
PHP+SQL在庫集計で在庫の累計が...
-
件数をカウントして日付でソー...
-
売り上げ集計SQLが作れません
-
Cは返して欲しくない
-
日ごとの集計
-
時間内かどうかの抽出
-
UPDATE文で・・・・
-
POSTGRESQLでt時間差が30分以上...
-
○日以内のレコード取得について
-
検索条件の指定方法がわかりま...
-
PostgresSQLで自動計算
-
日時の比較
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
おすすめ情報