我想根据我提供的日期格式 YYYY,MM,dd 从数据库中检索记录,但列类型是 YYYY,MM,dd hh:mm:ss。
尝试使用日期格式功能
SELECT *
FROM tabl.error_logs
where created_at = DATE_FORMAT(NOW(),'%Y-%m-%d'- INTERVAL 3 DAY);
我预计创建日期将是 2019-06-08,但结果为空
created_at
列的实际数据类型是什么?
这个答案会忽略与逗号格式funkiness,并假设它不是字符类型的数据,而且它的DATETIME
或TIMESTAMP
。
DATETIME
和TIMESTAMP
列谓词的规范模式是范围比较。
例如,要获取 6 月 10 日的所有 datetimecol 值,则如下所示:
WHERE t.datetimecol >= '2019-06-10 00:00:00'
AND t.datetimecol < '2019-06-11 00:00:00'
通常,我只会传递那个日期值,然后让 MySQL 找出第二天。如果我们省略时间部分,MySQL 将假定00:00:00
WHERE t.datetimecol >= '2019-06-10' + INTERVAL 0 DAY
AND t.datetimecol < '2019-06-10' + INTERVAL 1 DAY
为了性能,为了让 MySQL 在合适的索引上有效使用范围扫描操作,我们希望避免将列引用包装在函数中。也就是说,DATE(t.datetimecol)
在 WHERE 子句中指定条件将强制 MySQLDATE()
在表中的每一行上评估函数。
通过引用裸列,如果有合适的索引可用,则允许 MySQL 使用索引。
例如
SELECT e.*
FROM tabl.error_logs e
WHERE e.created_at >= DATE(NOW()) + INTERVAL -3 DAY
AND e.created_at < DATE(NOW()) + INTERVAL -2 DAY
请注意,我们可以轻松地测试 WHERE 子句中的这些表达式,以验证它们是否返回我们想要的内容,并根据需要进行调整:
SELECT DATE(NOW()) + INTERVAL -3 DAY
, DATE(NOW()) + INTERVAL -2 DAY
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句