STR_TO_DATE() 与 CONSTANT 比较 DATETIME 字段时

STR_TO_DATE() vs CONSTANT when comparing DATETIME field

有一个 table 和 DATETIME 字段,名为 'created_at'。 我尝试执行两个这样的查询:

  1. SELECT * FROM myTable WHERE created_at BETWEEN '2015-03-15 10:25:00' AND '2015-03-25 10:30:00';
  2. SELECT * FROM myTable WHERE created_at BETWEEN STR_TO_DATE('2015-03-15 10:25:00', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('2015-03-25 10:30:00', '%Y-%m-%d %H:%i:%s');

我一直使用第一种查询,但最近看到一篇文章,其中描述了第二种方法是比较的最佳方法 DATETIME。不幸的是,它不包含任何解释为什么这种方法是最好的方法。

现在,我有一些问题:

谢谢!

我更喜欢直接把常量放进去。我相信 MySQL 只会为查询处理一次 str_to_date() 函数,因为参数是常量。但是,我不喜欢依赖这种优化。

str_to_date() 的优点是它应该独立于国际化设置,因此结果应该是明确的。但是,使用ISO标准格式应该是等价的,那就是你常量的结构。

但是,除此之外,编写查询的更好方法是:

SELECT *
FROM myTabl
WHERE created_at >= '2015-03-15 10:25:00' AND
      created_at < '2015-03-25 10:30:00'

我猜您并不是真的想要间隔 10 天 5 分 1 秒,而是想要正好 10 天 5 分钟。在任何情况下,将 between 与日期和日期时间一起使用可能会导致意外结果,尤其是当您执行以下操作时:

where datetime between '2015-03-15' and '2015-03-16'

如果你认为你得到了两个日期,那你就错了。您将获得第一天的所有日期时间加上第二天的午夜。