MySQL将DATEstring与来自DATETIME字段的string进行比较

我有一个问题:是否可以通过比较一个DATEstring“2010-04-29”与存储为DATETIME(2010-04-29 10:00)的string从MySQL数据库中进行select?

我有一个dateselect器,筛选数据,我想通过这样的DATETIME字段查询表:

SELECT * FROM `calendar` WHERE startTime = '2010-04-29'" 

…我想获得DATETIME值为“2010-04-29 10:00”的行。

有什么build议么? 谢谢。

使用以下内容:

 SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29' 

仅供参考我有一个200万的logging表,我跑了类似的查询。 Salils答案花了4.48秒,上面花了2.25秒。

所以如果表是大,我会build议这个。

如果要selectDATETIME列的DATE部分与某个文字匹配的所有行,则不能这样做:

 WHERE startTime = '2010-04-29' 

因为MySQL无法直接比较DATE和DATETIME。 MySQL做了什么,它延长了给定的DATE文字的时间'00:00:00'。 所以你的状况就变成了

 WHERE startTime = '2010-04-29 00:00:00' 

当然不是你想要的!

条件是一个范围,因此它应该作为范围。 有几种可能性:

 WHERE startTime BETWEEN '2010-04-29 00:00:00' AND '2010-04-29 23:59:59' WHERE startTime >= '2010-04-29' AND startTime < ('2010-04-29' + INTERVAL 1 DAY) 

第一个错误的可能性很小 – 当你的DATETIME列使用亚秒级分辨率,并且在23:59:59 + epsilon有一个约会。 一般来说,我build议使用第二个变体。

这两个变种都可以在startTime上使用一个索引,当这个表增长的时候这个索引就变得很重要

 SELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'" 

要么

 SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29' 
 SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'; 

它有帮助,您可以在比较之前将值转换为DATE

 SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s') 

这在MySQL中使用DATE_FORMAT(date,format)

 SELECT * FROM `calendar` WHERE startTime like '2010-04-29%' 

你也可以在MySQLdate中使用比较运算符,如果你想查找之前或之后的东西。 这是因为它们是以这种方式编写的(最大值到最小的前导零),简单的stringsorting会正确sorting。