curdate()如何在MySQL中进行比较

curdate()如何在MySQL中进行比较,sql,mysql,date-arithmetic,Sql,Mysql,Date Arithmetic,我试图使用curdate检索数据库中的条目,我认为有一些我不知道的潜在逻辑。例如: SELECT * FROM foo WHERE event='bar' AND created_at >= SUBDATE(CURDATE(), 90) AND created_at <= CURDATE() 此调用返回之前的90天,但没有今天的任何条目。据我所知,curdate只是YYYY-MM-DD或yyyyymmdd,完全忽略了一天中的时间,我们将其保存为curtime和now。我怀疑时间

我试图使用curdate检索数据库中的条目,我认为有一些我不知道的潜在逻辑。例如:

SELECT * FROM foo WHERE event='bar' 
AND created_at >= SUBDATE(CURDATE(), 90) 
AND created_at <= CURDATE()
此调用返回之前的90天,但没有今天的任何条目。据我所知,curdate只是YYYY-MM-DD或yyyyymmdd,完全忽略了一天中的时间,我们将其保存为curtime和now。我怀疑时间被包含在这里的某个地方,因为当我在Rails中进行类似的调用并将日期作为DateTime.Start of of day传递时,它会起作用,而任何其他方式都不会将今天包含到某个小时

我查阅了一些资料,包括MySQL参考手册,还没有找到任何真正的答案。当前时间的某些元素是否可能包含在查询中,或者是否有其他业务正在闭门进行?

如果您的“创建时间”列是完整的日期时间类型,则与日期进行比较时,它将以该日期的开头为准

因此,与2011-01-01的比较与2011-01-01 00:00:00的比较类似。这就是为什么你不能为CURDATE返回任何东西,除非创建的时间戳正好是该日期的午夜

例如:

select curdate();
-- 2011-01-31

select cast(curdate() as datetime);
-- 2011-01-31 00:00:00

select if('2011-01-31' <= curdate(), 'yep', 'not this time');
-- yep

select if('2011-01-31 00:00:01' <= curdate(), 'yep', 'not this time');
-- not this time

select if('2011-01-31 01:00:00' <= adddate(curdate(), interval 1 day), 'yep', 'not this time');
-- yep
如果您的created_at列是full datetime类型,那么在与日期进行比较时,它将以该日期的开头为准

因此,与2011-01-01的比较与2011-01-01 00:00:00的比较类似。这就是为什么你不能为CURDATE返回任何东西,除非创建的时间戳正好是该日期的午夜

例如:

select curdate();
-- 2011-01-31

select cast(curdate() as datetime);
-- 2011-01-31 00:00:00

select if('2011-01-31' <= curdate(), 'yep', 'not this time');
-- yep

select if('2011-01-31 00:00:01' <= curdate(), 'yep', 'not this time');
-- not this time

select if('2011-01-31 01:00:00' <= adddate(curdate(), interval 1 day), 'yep', 'not this time');
-- yep

+1:如果有疑问,请检查列的数据类型-MySQL有DATE和DATETIME。显然,该列是一个时间戳,从我阅读的内容来看,我更应该在尝试适应时间戳之前将该列更改为DATETIME。“你会说那是准确的吗?”凯伯说。没错,你把它比作约会。将日期与时间戳进行比较时,将假定该日期为当天开始时的午夜,即0小时、0分钟、0秒。您应该将时间戳与时间戳进行比较,或者使用adddate之类的工具来获取该日期内的任何记录。非常感谢!+1:如果有疑问,请检查列的数据类型-MySQL有DATE和DATETIME。显然,该列是一个时间戳,从我阅读的内容来看,我更应该在尝试适应时间戳之前将列更改为DATETIME。“你会说那是准确的吗?”凯伯说。没错,你把它比作约会。将日期与时间戳进行比较时,将假定该日期为当天开始时的午夜,即0小时、0分钟、0秒。您应该将时间戳与时间戳进行比较,或者使用adddate之类的工具来获取该日期内的任何记录。非常感谢!我现在开始跑步了。