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。