gpt4 book ai didi

MySQL 日期函数 - 你可以不用查询就检查它们的输出吗

转载 作者:行者123 更新时间:2023-11-29 06:42:35 25 4
gpt4 key购买 nike

我最近收到了一个需要优化的查询,它看起来比需要做的要多得多。

无论如何,查询的一部分对我来说似乎是多余的,我只是想确保它没有做我认为正在做的更多事情:

    WHERE orders.`date` > 
DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 MONTH),"%Y-%m-01")
AND DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 DAY),"%Y-%m-01")

根据我的理解,第一个 DATE_FORMAT() 应该输出上个月的第一天,但​​是,我对第二个 DATE_FORMAT() 函数没有任何意义因为它已经在第一个中指定了日期???

我的问题是有人可以阐明以上内容(如果有的话),或者告诉我如何检查 MySQL 函数的输出吗?

谢谢!

最佳答案

要检查此函数的结果,只需执行以下操作:

SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 DAY),"%Y-%m-01");

要确定此条件是否真的总是计算为真,只需执行以下操作:

SELECT COUNT(*) FROM some_table;

SELECT COUNT(*) FROM some_table
WHERE DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 DAY),"%Y-%m-01");

您会看到,两个查询的结果(计数)将相同,
看演示:--> http://www.sqlfiddle.com/#!2/03c4d/3


MySql 在解析阶段识别常量表达式,并删除计算结果为 true 的表达式。
此处描述了详细信息:http://dev.mysql.com/doc/refman/5.6/en/where-optimizations.html .

要检查 MySql 是否真的消除了这种情况,请执行以下命令:

EXPLAIN EXTENDED
SELECT * FROM some_table
WHERE DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -1 DAY),"%Y-%m-01");

SHOW WARNINGS;

这会显示如下内容:

/* select#1 */ select `test`.`some_table`.`x` AS `x` 
from `test`.`some_table` where 1

注意 where 1 - 查询中的整个条件已简化为 1(真)。

关于MySQL 日期函数 - 你可以不用查询就检查它们的输出吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20542487/

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