0

有一个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。不幸的是,它没有解释为什么这种方法是最好的方法。

现在,我有一些问题:

  • 这两种方法有什么区别吗?
  • 哪种方式更可取?

谢谢!

4

1 回答 1

2

我更喜欢直接放入常量。我相信 MySQLstr_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 分钟。在任何情况下,使用betweenwith 日期和日期时间都可能导致意外结果,尤其是当您这样做时:

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

如果你认为你有两个约会,那你就错了。您将在第一天获得所有日期时间,并在第二天获得午夜。

于 2015-03-29T15:55:36.813 回答