2016-11-20 73 views
1

這是表:MySQL的:獲取記錄,時間的開始和結束時間之間(「XX:YY和ZZ」)

+----+-----------+------------+----------+ 
| id | id_sensor | start_time | end_time | 
+----+-----------+------------+----------+ 
| 1 |  12 | 21:15:00 | 02:45:00 | 
| 2 |   7 | 00:00:00 | 23:15:00 | 
| 3 |   5 | 04:30:00 | 16:30:00 | 
+----+-----------+------------+----------+ 

我需要得到結果,其中一個特定的時間(例如01 :00:00)通過PHP之間。 start_time和end_time是UTC中的TIME字段,我通過php傳遞到查詢小時,note,在php中從user_timezone轉換爲UTC。

SELECT * FROM test WHERE TIME('01:00:00') BETWEEN start_time AND end_time; 

查詢返回唯一記錄編號2,而不是1。我需要兩個,在此情況下(ID 1,結束時間ofcourse是第二天)。

當然,如果我們尋找TIME('01:00:00' ),我們需要的ID 3.

謝謝。

+0

什麼是邏輯找出範圍包裝一天?因爲如果你還沒有日期字段,那麼每個開始時間/結束時間情侶都會與你的查詢匹配,無論如何:D – Johnny

+0

@Johhny這是我的預期行爲。但是,如果你嘗試我的SQL,它不會得到ID 1 .... – sineverba

+0

你不明白我的意見。用你不想返回的行擴展你的問題。 – Johnny

回答

1

我想這是你想要的邏輯:

SELECT * 
FROM test 
WHERE (start_time < end_time AND TIME('01:00:00') BETWEEN start_time AND end_time) OR 
     (start_time > end_time AND TIME('01:00:00') NOT BETWEEN end_time AND start_time); 
+0

當然,它的工作原理!我不明白爲什麼NOT BETWEEN在ID爲1的情況下工作...但是,謝謝 – sineverba

+0

這很好,但它會給你誤報,實際上它會匹配所有記錄,其中start> end。如果'start_time> end_time','NOT_BETHEN_START_TIME AND_End_time'將始終爲真,它應該是 '不在end_time和start_time'之間,反轉時間。 – phobia82

+1

查詢'TIME(「05:00:00」)'它會匹配3條記錄,但應該只有1和3 – phobia82

-1

現在()返回兩者,當前時間和日期。您也可以使用curtime(),它只返回當前時間。

順便說一句,我認爲應該避免使用SELECT *(也許你只是爲了這個例子使用它),它是恕我直言總是更好地列出明確需要的字段。

+1

我不/不能與NOW()一起工作。感謝您選擇*,我知道,這只是一個測試...謝謝 – sineverba

相關問題