你的圓括號在錯誤的地方。所以你用1個參數調用TIMEDIFF()
,並用2個參數調用MINUTE()
。此外,您不需要使用SELECT
來獲得TIME(NOW())
,您可以將該函數調用用作參數。
SELECT *
FROM exampleTable
WHERE MINUTE(TIMEDIFF(TIME(NOW()), timeC)) < 5
但是,這仍然存在問題。 TIMEDIFF()
如果timeC
當天晚些時候可以返回負值時間,但MINUTE()
總是返回分鐘的正值,所以這將匹配5分鐘前到5分鐘後的任何值。簡單地將時間與範圍進行比較會更好:
SELECT *
FROM exampleTable
WHERE timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND TIME(NOW())
有一個重要問題。如果您在午夜後不久執行此查詢,則提前5分鐘的時間將比前一天晚。例如,如果它當前是00:02
,則提前5分鐘將是23:57
,並且沒有任何內容會與BETWEEN
表達式匹配。你需要檢查:
SELECT *
FROM exampleTable
WHERE CASE
WHEN TIME(NOW()) >= '00:05'
THEN timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND TIME(NOW())
ELSE timeC BETWEEN '00:00' AND TIME(NOW())
OR
timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND '23:59:59'
END
由於'TIME'類型只包含時間,即不知道它屬於哪個日期,所以我不確定你想要查詢什麼,真的:) – AKX
@akx,這個問題受到限制,使得被檢查的記錄總是從查詢運行當天的較早時刻開始。 –