私は2つの列、タイムスタンプとスパンを持つMYSQLテーブルを持っています。 timestampはunixタイムスタンプですが、spanは整数です。unix-timestampから時間範囲を選択
タイムスタンプが現在の時刻とスパンの半分の間のすべての行を選択したいとします。
例:現在の時刻が23:00の場合は、タイムスタンプ時間が21と01の間にあるすべての行が必要です。問題はもちろん、すべてのタイムスタンプは異なる日からのものです。
は、私は日私はこれを行う方法を考え出した
だけの時間を気にしない、明確にするために、それは、そのようなハックのように思えます。より多くのMYSQLの知識を持つ人が私にこれを行うためのよりきれいな方法を示すことができると確信しています。
SELECT *
FROM table
WHERE (
TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR)) <= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
AND (
TIME(FROM_UNIXTIME(timestamp)) >= TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR))
AND TIME(FROM_UNIXTIME(timestamp)) <= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
)
)
OR (
TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR)) >= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
AND (
TIME(FROM_UNIXTIME(timestamp)) >= TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR))
OR TIME(FROM_UNIXTIME(timestamp)) <= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
)
)