mysql - 日期与日期格式的比较不符合预期

标签 mysql sql

嘿,我有一个查询可以正常工作,但出于某种原因,今天它没有,我怀疑它与月份变化有关。

这个查询:

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/

相关文章:

php - MySQL/PHP : Use inner join if value isn't 0

mysql - 如何自加入以及何时加入

mysql - 正则表达式中的数字字符类在 MySQL 中对我不起作用

sql - Postgresql 递归返回意外结果

javascript - 强制循环在进入下一次迭代之前等待 mysql 插入

c# - 原生 SQL 和实体 SQL 之间的区别

sql - 如何解码sql server中的html编码文本? (或 ms Access !)

mysql - 在Mysql中对链表进行排序

mysql - 通过一次查询获取最后订单日期、订单总数和总金额?

mysql - 使用 group by/order by 执行 MSQL 查询