2017-04-21 52 views
0

這是失敗的查詢:搜索返回空集

SELECT * FROM court_records 
WHERE county = 1 
AND last_exported_date > '2017-04-21 00:00:00 -0400' AND last_exported_date <= '2017-04-21 23:59:59 -0400'; 
Empty set, 1 warning (0.12 sec) 

它說,它無法找到任何記錄。但後來我知道有今天的last_exported_date多條記錄:

SELECT COUNT(*) FROM court_records WHERE DATE(last_exported_date) = CURDATE(); 
+----------+ 
| COUNT(*) | 
+----------+ 
|  1609 | 
+----------+ 

事實上,這裏只是一個例子:

SELECT * FROM court_records WHERE id = 43862\G; 
*************************** 1. row *************************** 
       id: 43862 
      county: 1 
last_exported_date: 2017-04-21 
     created_at: 2017-04-21 16:24:43 
     updated_at: 2017-04-21 17:12:58 

那麼,爲什麼我第一次查詢返回一個空集?我該如何解決它?

+0

您是否將日期與時差區別? – aletzo

+0

@aletzo我假設它使用默認的mysql – Donato

+0

'last_exported_date'似乎被格式化爲'YYYY-MM-DD',所以我認爲你必須在你的'where'子句中相應地設置日期的格式 – aletzo

回答

0

你可以試試這個

WHERE last_exported_date >= '2017-04-21' AND startTime < ('2017-04-21' + INTERVAL 1 DAY) 

或者,你可以檢查日期這樣

WHERE DATE(last_exported_date)='2017-04-21' 
0

您的日期範圍構建稍微不正確。

你有

 last_exported_date > '2017-04-21 00:00:00 -0400' /* off-by-one! */ 
    AND last_exported_date <= '2017-04-21 23:59:59 -0400'; 

要以日期來獲得21-APR-2017的記錄,你要這個......一個變化對>=<

 last_exported_date >= '2017-04-21 00:00:00 -0400' 
    AND last_exported_date < '2017-04-22 00:00:00 -0400'; 

第一個表達式,來自您的問題的數據恰巧排除了值2017-04-21DATETIME2017-04-21 00:00:00的任何記錄。

而且,當查找一整天的記錄時,使用< the next day<= the last moment of the current day更清潔。

順便說一句,你的時區指標在MySQL中不起任何作用。