次のようなクエリがあります。
SELECT
hd.definition_id,
hd.sun_end < hd.sun_start AS sunEndFirst,
(IF (
hd.sun_end IS NULL,
0,
IF(
hd.sun_start IS NULL,
0,
IF(hd.sun_end = hd.sun_start, 24, time_to_sec(timediff(hd.sun_end, hd.sun_start)) / 60)
)
))
FROM audit_hour_definition AS hd
WHERE hd.definition_id = 5
ORDER BY hd.definition_id
2つの時間が等しい場合(例:09:00:00-09:00:00)、クエリは機能します。開始時刻と終了時刻が同じ日(例:02:00:00-16:00:00)の場合、クエリは機能します。開始時刻と終了時刻が真夜中のマーカーにまたがると、クエリは失敗します。たとえば、12が必要な場合、18:00:00〜06:00:00は-720を返します。
誰かがこの問題に対処するための良い方法を持っていますか?
編集:すべての時間列はMySQLのTIMEデータ型を使用します。