簡體   English   中英

MySQL返回假與正確之間的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM