<分区>
This答案建议使用大于/小于来查询与给定日期匹配的日期。但是我公司的一位资深人士告诉我使用 LIKE '2014-02-06%'
。
最佳做法是什么?两者之间有什么明显的优势吗?
最佳答案
当您在此上下文中使用 LIKE 时,您是在(隐式地和不可见地)将 DATE、TIMESTAMP 或 DATETIME 列值类型转换为字符串,然后将该字符串与您提到的模式进行比较。类型转换操作最终会阻止对列值使用任何索引。应用于 WHERE 子句中的列值的任何函数也是如此。
因此,您的同事得到的结果是正确的。但是他们得到它的速度比他们需要的要慢得多,因为他们使用全表扫描而不是 index range scan。 .
顺便说一句,BETWEEN 对 DATE 列有效,但对 DATETIME 或 TIMESTAMP 列无效。要从后两个日期中选择一个日期,您需要
WHERE dateval >= '2014-02-06'
AND dateval < '2014-02-06' + INTERVAL 1 DAY
问题是
WHERE dateval BETWEEN '2014-02-06' /* wrong! */
AND '2014-02-06' + INTERVAL 1 DAY
在您想要的次日午夜恰好拾取 dateval 项目。两种公式都对索引使用范围扫描,这使得它们速度很快。但是 BETWEEN 可能会得到错误的结果。
关于mysql - 查询日期 : is "dateval LIKE ' 2014-01-01 %'" a best practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21676514/
相关文章:
mysql - LightSwitch + MySQL 错误 : Nested Transactions are not supported
sql - PostgreSQL,从 2 个表中选择,但仅从表 2 中选择最新元素
C# DateTime.TryParse 相同格式,不同日期
PHP fatal error : Call to a member function execute() on a non-object
mysql - 对包含数字和其他非字母字符的 varchar 列进行排序
c# - System.DateTime.Year(及其其他属性)是如何实现的?