gpt4 book ai didi

MYSQL Where on DateTime 错误结果

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:11 25 4
gpt4 key购买 nike

我有一个 MySQL 查询来根据日期时间字段选择一些行。

日期时间字段是created_at,它还有一个BTREE索引。当我写一个包含日期时间地点的声明时,出于某种原因,我不断收到错误的结果。

示例查询:

Select text,UNIX_TIMESTAMP(created_at),DATE(created_at) 
from Services where Binary text like '%Rd' or Binary text like '%Rd%'
and DATE(created_at)>=STR_TO_DATE('2014-03-07','%Y-%m-%d')
order by UNIX_TIMESTAMP(created_at);

结果是:'2014-02-21''2014-02-26''2014-02-27''2014-03-03''2014-03-05''2014-03-06'

其余的都是正确的。这些行会发生什么?这可能是 BTREE 索引的问题吗?对于每个日期,我总是会得到前几天的 5-10 行。

这不可能是时区问题,因为我收到的是以前日期的行。

结果是一样的:

Select text,UNIX_TIMESTAMP(created_at),DATE(created_at),MONTH(created_at) 
from Services where Binary text like '%Rd' or Binary text like '%Rd%'
and YEAR(created_at)>=2014 and MONTH(created_at)=3 and DAY(created_at)>=7
order by UNIX_TIMESTAMP(created_at);

编辑:发现我忘了一个OR

最佳答案

您的查询中发生了几件有趣的事情。

一:ANDOR 子句是右结合的。你所拥有的实际上是这个,它会拉入一些与你的日期比较不匹配的行。

 Binary text like '%Rd' OR ( 
Binary text like '%Rd%'
and DATE(created_at)>=STR_TO_DATE('2014-03-07','%Y-%m-%d'
)

你想要的是

         ( Binary text like '%Rd' OR  Binary text like '%Rd%' ) 
and DATE(created_at)>=STR_TO_DATE('2014-03-07','%Y-%m-%d'

但实际上你只需要

         Binary text like '%Rd%' 
and DATE(created_at)>=STR_TO_DATE('2014-03-07','%Y-%m-%d'

因为匹配第一个 like 子句的所有内容也匹配第二个。

二:您正在系统地阻止在 created_at 上使用您的 BTREE 索引。请改用它,以允许使用索引。

  WHERE created_at >= STR_TO_DATE('2014-03-07','%Y-%m-%d')

第三,您正在使用 ORDER BY 子句为服务器做额外的工作。 DATETIME 数据类型和 TIMESTAMP 类型一样对它们自己进行排序。所以使用:

 order by created_at

考虑到所有这些观察结果,您应该考虑将其用于您的查询。

Select text,UNIX_TIMESTAMP(created_at),DATE(created_at) 
from Services
where Binary text like '%Rd%'
and created_at >= STR_TO_DATE('2014-03-07','%Y-%m-%d')
order by created_at;

关于MYSQL Where on DateTime 错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23786927/

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