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

标签 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

但是当我使用 20th 时,结果很明显

我的主表是

enter image description here

我将时间格式从 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/

相关文章:

java - 我无法使用 JTable 从 SQL 数据库中删除

SQL 从给定的零件列表中创建完整的零件列表(迭代)

java - Android:如何根据当前位置(地理位置/地理代码)获取时间或时区

ruby - 将时间序列值的 Ruby 数组映射到加权间隔

for-loop - Erlang 函数 for()?

mysql - 如果我只在 aiomysql 中选择,我是否需要提交

php - 我无法使用 json 在本地主机服务器中发布数据和图像

python - mysql 和 python 中的多线程

MYSQL - 基于其他列中公共(public)值的列的 SUM

java - android游标如何从列中获取空值