有效的mysql日期比较:忽略时间组件
>>经常,数据库查询需要比较日期而不考虑时间组件。 MySQL提供了多种功能来有效地实现这一目标。
方案:
>假设您的表格players
> us_reg_date
DATETIME
。目的是选择在两个特定日期之间注册的所有玩家,仅关注日期并无视时间。 效率低下的方法(以及为什么失败):
>
CONVERT
最初的尝试可能涉及使用
<code class="language-sql">SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10';</code>
这种方法效率低下,容易出错。 CONVERT
函数更改数据类型,阻碍有效的索引使用情况。 此外,直接的日期比较可能会导致意外结果。
有效的解决方案:
此查询直接比较
<code class="language-sql">SELECT * FROM players WHERE us_reg_date >= '2000-07-05' AND us_reg_date < DATE_ADD('2011-11-11', INTERVAL 0 DAY);</code>
。这巧妙地选择了所有的历史,但不包括“ 2011-11-11”的午夜,有效地涵盖了整个“ 2011-11-10”。 此方法可保持索引可用性,以实现最佳查询性能。 另外,DATETIME
可以用于清晰的意图,但效率可能比直接比较略低。< DATE_ADD('2011-11-11', INTERVAL 0 DAY)
DATE(us_reg_date)
此精制方法可确保在保留数据库性能的同时进行准确的日期比较。
以上是如何在没有时间组件的情况下高效比较 MySQL 中的日期?的详细内容。更多信息请关注PHP中文网其他相关文章!