• ベストアンサー

時間の計算によってある行を取り出す

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時間以上だった場合も考慮に入れないといけないので難しそうな気がしますが、、

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

  • ベストアンサー
回答No.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') ;

takagoo100
質問者

お礼

ご返答ありがとうございます。 こちらの環境でもできました。ありがとうございます。

その他の回答 (1)

回答No.1

>(時刻はdate("y/m/d H:i:s")という形式です) 質問の内容が分かりにくいのですが。。。 start_time1、end_time1、start_time2、end_time2のそれぞれのデータ型は、MySQLのdatetime型ですか?また、日付と時刻を、それぞれ格納しているのですか?

takagoo100
質問者

補足

ご返答ありがとうございます。 すいません、PHPと連動してやっているものでごっちゃになっていました・・・ データ型はDATETIME です。 例えば start_time1には「2007-09-12 23:30:30」 end_time1には「2007-09-13 0:30:30」 という形で入っています。