我有一个按日期搜索的查询。这是 WHERE 子句:
WHERE DATE_FORMAT(listing.trackdate,'%Y-%m-%d') >= STR_TO_DATE('$search_sdate','%m/%d/%Y')
MySQL 是否必须处理每一行的 date_format 和 str_to_date 才能满足 where 子句?或者有更优化的方法吗?表中的字段是日期时间类型。它的 MySQL 版本为 5.x。 $search_sdate 是从网络表单收到的日期。
编辑: 为了澄清我想比较日期字段的一部分。日期字段类型是日期时间,存储日期加上插入每行的时间。但对于这个特定的 where 子句,我只想比较字段的日期部分。希望这能更好地澄清这一点,对于造成的困惑深表歉意。
最佳答案
如果listing.trackdate
是一个DATE
字段,为什么它需要格式化才能与另一个日期进行比较?看来您正在获取一个日期值并将其转换为字符串,以便您可以将其与已转换为日期的字符串值进行比较。
我希望这种方法的冗余应该是显而易见的。
对于您提出的第一个问题,当然必须对每一行评估DATE_FORMAT(listing.trackdate)
,因为该字段中的值会发生变化。不过好像是这样的
WHERE listing.trackdate >= STR_TO_DATE('$search_sdate','%m/%d/%Y')
应该足够了,如果trackdate
确实是一个DATE字段。
关于Mysql和日期函数,它是否对每一行进行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009457/