我在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)的结果是
但是当我使用第20个时,结果就是
我的主表是
我将时间格式从2016/03/20更改为2016-03-20(我的意思是更改/到 - )但它也没有变化!
问题是什么?
答案 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'