嘿,我有一个查询可以正常工作,但出于某种原因,今天它没有,我怀疑它与月份变化有关。
这个查询:
select
if((date_format("28/04/13","%d/%m/%y") < date_format(NOW(),"%d/%m/%y")),'ok','not ok')
将打印 not ok
虽然术语应该满足。
我的值实际上不是一个字符串,它是一个 TIMESTAMP
列。
注意:我希望它仅在一天过去后显示ok
,此后date_format
我的真实查询在 where
子句中有那些参数,如果日期不是今天,也不是今天 6 点之后,则获取记录。这是不运行的完整子句:
and ifnull(date_format(a.daily_check,"%d/%m/%y"),
date_format(now()- interval 2 day,"%d/%m/%y")) < NOW()
and ifnull(date_format(a.daily_check,"%d/%m/%y 06:00"),
now()- interval 2 day) < date_format(NOW(),"%d/%m/%y %h:%I")
谁知道为什么?
我在 MySql 版本 5.5.28
最佳答案
你不应该使用 DATE_FORMAT()
而应该使用 STR_TO_DATE()
IF(STR_TO_DATE('28/04/13', '%d/%m/%y') < CURDATE(), 'ok', 'not ok')
DATE_FORMAT() => 日期到字符串
STR_TO_DATE() => 截至日期的字符串
您的问题是,由于您使用了 date_format
,因此发生了字符串比较,而不是日期。要么将其包装在 str_to_time
中,要么更改您的逻辑
关于mysql - 日期与日期格式的比较不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16314882/