SQL查询在特定日期不起作用

时间:2017-08-23 05:58:36

标签: mysql sql time timestamp

我在mysql中有一个奇怪的问题! 我的查询是

SELECT * FROM aa WHERE problemTime>= '2016/03/20' AND problemTime<= '2016/04/20' 

此查询的结果不算什么,但是当我第一次更改为2016/03/19或2016/03/21时,我得到以下结果!我的意思是这些查询

SELECT * FROM aa WHERE problemTime>= '2016/03/21' AND problemTime<= '2016/04/20' 

SELECT * FROM aa WHERE problemTime>= '2016/03/19' AND problemTime<= '2016/04/20' 

时间(第19和第21)的结果是

enter image description here

但是当我使用第20个时,结果就是

我的主表是

enter image description here

我将时间格式从2016/03/20更改为2016-03-20(我的意思是更改/到 - )但它也没有变化!

问题是什么?

3 个答案:

答案 0 :(得分:2)

如果您的problemTime列是datetime类型,那么您应该真正运行这样的查询:

SELECT * FROM aa 
WHERE    
  problemTime>= str_to_date('2016/03/20', '%Y/%m/%d') AND 
  problemTime <= str_to_date('2016/04/20', '%Y/%m/%d')

不要依赖字符串和日期之间的隐式转换。单独保留表数据并确保将where子句参数显式转换为与表中相同的数据类型。还要记住日期&#34;没有&#34;一个时间实际上是当天的午夜,而午夜就像零,这是在任何一天发生的第一件事。在给定日期的早上6点的时间是在午夜之后,因此询问特定日期的小于或等于午夜的日期意味着将排除早上6点的日期

这是一般的良好数据库实践;不要在可能的情况下转换表数据,因为它可能导致巨大的性能命中和错误的结果

答案 1 :(得分:0)

您的专栏“problemTime”包含日期和时间。不要转换表数据,更改where子句(添加时间)。

SELECT * FROM aa WHERE problemTime>= '2016/03/20 00:00:00' AND problemTime<= '2016/04/20 23:59:59'

答案 2 :(得分:-2)

根据SQl Server尝试此操作。

 SELECT * FROM aa 
 WHERe  cast(problemTime AS date)  between  '2016/03/21' AND '2016/04/20'