gpt4 book ai didi

mysql - 比较 DATETIME 字段时的 STR_TO_DATE() 与 CONSTANT

转载 作者:行者123 更新时间:2023-11-29 07:40:06 26 4
gpt4 key购买 nike

有一个表,其中包含名为“created_at”的 DATETIME 字段。我尝试执行两个查询,如下所示:

  1. 从 myTable WHERE created_at BETWEEN '2015-03-15 10:25:00' 和 '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'

如果您认为自己有两次约会,那您就错了。您将获得第一天的所有日期时间以及第二天的午夜。

关于mysql - 比较 DATETIME 字段时的 STR_TO_DATE() 与 CONSTANT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331219/

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