我在 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次)的结果都是
但是当我使用 20th 时,结果很明显
我的主表是
我将时间格式从 2016/03/20 更改为 2016-03-20(我的意思是将/更改为 - )但它也没有更改!
有什么问题吗?
最佳答案
如果您的 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 子句参数显式转换为与表中相同的数据类型。还要记住,“没有”时间的日期实际上是相关日期的午夜,而午夜就像零,这是任何一天发生的第一件事。给定日期的早上 6 点时间是午夜之后,因此查询要求日期小于或等于特定日期午夜的日期意味着早上 6 点日期将被排除
这是一般良好的数据库实践;尽可能不要转换表数据,因为它会导致巨大的性能损失和错误的结果
关于mysql - SQL 查询在特定日期不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831691/