- ベストアンサー
時間の計算によってある行を取り出す
MySQLバージョン4.1.16を使っています。 id start_time1 end_time1 start_time2 end_time2 という時刻が入っている項目があったときに、(時刻はdate("y/m/d H:i:s")という形式です) (end_time1 - start_time1)の値と(end_time2 - start_time2)の値の合計が 例えば5時間30分以上だった場合にのみ、その行を取り出すというSQL文は どのように書けば良いのでしょうか? 合計が24時間以上だった場合も考慮に入れないといけないので難しそうな気がしますが、、
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あまり美しいコードではありませんが日付を秒に変換して以下のようにしては、いかがでしょう?。 (検索時間は遅いと思いますが) select ・・・・from xxx where TIME_TO_SEC(end_time1 - start_time1) + TIME_TO_SEC(end_time2 - start_time2) > TIME_TO_SEC('5:30:00') ; MySQLバージョン5.0で以下テストしました。 select 1 from dual where TIME_TO_SEC(cast('20070919120000' as DATETIME) - cast('20070919090000' as DATETIME)) + TIME_TO_SEC(cast('20070919173000' as DATETIME) - cast('20070919130000' as DATETIME)) > TIME_TO_SEC('5:30:00') ;
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>(時刻はdate("y/m/d H:i:s")という形式です) 質問の内容が分かりにくいのですが。。。 start_time1、end_time1、start_time2、end_time2のそれぞれのデータ型は、MySQLのdatetime型ですか?また、日付と時刻を、それぞれ格納しているのですか?
補足
ご返答ありがとうございます。 すいません、PHPと連動してやっているものでごっちゃになっていました・・・ データ型はDATETIME です。 例えば start_time1には「2007-09-12 23:30:30」 end_time1には「2007-09-13 0:30:30」 という形で入っています。
お礼
ご返答ありがとうございます。 こちらの環境でもできました。ありがとうございます。