繁体   English   中英

SQL查询在特定日期无效

[英]SQL query doesn't work on a specific day

我在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点的日期

这是一般的良好数据库实践; 请勿在可能的情况下转换表数据,因为这可能会导致巨大的性能损失和错误的结果

您的列“ problemTime”具有日期和时间。 不要转换表数据,请更改where子句(添加时间)。

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

按照SQl服务器尝试此操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM