gpt4 book ai didi

mysql - 定义为 String 的 mysql 日期和由 "date()"包装的日期有什么区别?

转载 作者:行者123 更新时间:2023-11-29 03:54:09 27 4
gpt4 key购买 nike

我有一个非常基本的查询:

SELECT count(*)  FROM myTable WHERE report_date='2013-12-01';

结果:

 100

另一方面,下面的示例给了我其他结果(偏移量为 1)

SELECT count(*)  FROM myTable WHERE date(report_date) = '2013-12-01';

结果:

 101 // Hmmm

请帮忙,

谢谢,

[编辑]

report_date 的类型为 datetime

最佳答案

除了其他人已经解释过的原因之外,在具有时间分量的列上查询日期范围的最佳可能且对索引最友好的方法是

SELECT COUNT(*)  
FROM myTable
WHERE report_date >= :start_date
AND report_date < :end_date + INTERVAL 1 DAY;

这是 SQLFiddle 演示

不要在 WHERE 子句中的条件左侧使用任何函数(例如 DATE())例子

WHERE date(report_date) = '2013-12-01'

这样做可以防止 MySQL 使用您可能在此列上创建的任何索引(索引)有效地导致完全扫描。

在右侧进行所有必要的转换,将它们应用于常量(参数)值。


推荐阅读:

关于mysql - 定义为 String 的 mysql 日期和由 "date()"包装的日期有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21014972/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com