[英]MySQL time between returning false and it should be true
SELECT *
FROM tablename
WHERE
MAKETIME(3,0,0) BETWEEN MAKETIME(23,0,0) AND MAKETIME(5,0,0)
沒有返回任何內容,而3:00在23:00和5:00之間。 為什么有人可以解釋我如何解決這個問題?
目前還不清楚是什么你實際上是試圖在這里做,因為即使3例5和23之間的查詢只會返回表中的所有記錄。
SELECT MAKETIME(3,0,0) BETWEEN MAKETIME(5,0,0) AND MAKETIME(23,0,0)
返回0,因為3不為5和23之間。
SELECT MAKETIME(5,0,0) BETWEEN MAKETIME(3,0,0) AND MAKETIME(23,0,0)
返回1,因為5在3到23之間。
演示: SQL Fiddle
大概您想總結到前一天,在這種情況下,您可以直接比較datetime
值,但是由於您的問題,您實際上正在使用哪些字段/數據類型尚不清楚。
更新:基於您的評論,我想你想2個比較。 3不在5到23之間,因為時間不會跨越幾天。 但是,如果您只關心時間部分,則可以這樣處理:
SELECT *
FROM tablename
WHERE YourTime BETWEEN MAKETIME(23,0,0) AND MAKETIME(23,59,59)
OR YourTime BETWEEN MAKETIME(0,0,0) AND MAKETIME(5,0,0)
請記住, BETWEEN
是包容性的,所以如果您的截止時間是凌晨5點,則您可能希望將其設為MAKETIME(4,59,59)
因此它包括4:59但不包括5:00
函數MAKETIME返回根據小時,分鍾和第二個參數計算得出的時間值:
mysql> SELECT MAKETIME(3,0,0),MAKETIME(23,0,0),MAKETIME(5,0,0)
-> '03:00:00', '23:00:00', '05:00:00'
當然,3不在23 AND 5之間,它將返回false。 但是是的,3AM實際上是在11PM和5AM之間,那么您如何解決這個問題?
讓我們將23作為您的START_TIME,將5作為您的END_TIME。
由於START_TIME具有END_TIME之前發生,如果不是這種情況(23> 5)的裝置,在未來天的間隔輥。
我會嘗試用這樣的查詢:
SELECT *
FROM yourtable
WHERE
(MAKETIME(START_TIME,0,0)<=MAKETIME(END_TIME,0,0) AND MAKETIME(3,0,0) BETWEEN MAKETIME(START_TIME,0,0) AND MAKETIME(END_TIME,0,0))
OR
(MAKETIME(START_TIME,0,0)>MAKETIME(END_TIME,0,0) AND NOT (MAKETIME(3,0,0) BETWEEN MAKETIME(START_TIME,0,0) AND MAKETIME(END_TIME,0,0)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.