0

タイプ TIME のテーブルに列があります。そのシフトの 24 時間制表示になるタイム シフトを適用する結果を取得したいと考えています。シフトを追加するには、私のクエリには...

select addtime(boo,'01:00:00') as yada

ただし、24 時間の範囲から外れた値は、最終的に 24 時間の範囲外になります...

23:45 は 24:45 になります (00:45:00 が必要な場合)

逆に、午前 1 時未満の値から時間を引くと、次のようになります。

00:15 は、必要に応じて -00:45:00 になります (23:15:00)

さて、MYSQLのTIME形式は実際の「時間」ではなく「期間」であることを理解していますが、私の人生では、上記のように実際のクロック時間に変換する方法がわかりません。私を助けてください、または私を殺してください。どちらかが私の苦しみを終わらせるでしょう。

4

2 に答える 2

2

簡単な解決策は、DATETIME代わりにデータ型を使用し、日付部分を無視することです。膨大な量のデータを扱っていない場合、または実際の時間で検索している場合、問題は見られません。

おまけとして、+ INTERVAL 1 HOURなどのデータを操作できるようになります。

それを抽出するときに使用するだけですTIME(boo)

ご存じのように、MySQL のTIME型は 24 時間制に制限されていないため、おそらくこれが最も近いでしょう... MOD()etc を使用してクエリを作成できると確信していますが、おそらくその価値はありません。

于 2013-09-11T04:04:05.147 に答える
1

考えられる解決策は、booTIME値を任意の日付(今日など)に追加してから、時間のデルタを追加してから、時間部分を返すだけですTIME()

SELECT TIME(CURDATE() 
             + INTERVAL TIME_TO_SEC('23:45:00') SECOND 
             + INTERVAL 1 HOUR) new_time

出力:

+---------+
| | new_time |
+---------+
| | 00:45:00 |
+---------+

これがSQLFiddleのデモです

于 2013-09-11T04:09:07.250 に答える