2017-04-21 50 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中不起任何作用。