如何在MySQL中判断datetime等于明日日期并查询对应表数据?
在MySQL中判断datetime类型是否等于明日日期并检索数据
刚好之前处理过类似的需求,这里给你两种靠谱的实现方式,分别适合不同场景:
方法一:提取日期后直接匹配(简单直观)
因为datetime类型包含时分秒,直接和明日日期字符串比较会漏掉大部分数据,所以我们可以用DATE()函数提取created_at的日期部分,再和明日的日期做对比。
明日日期可以用CURDATE() + INTERVAL 1 DAY或者DATE_ADD(CURDATE(), INTERVAL 1 DAY)来生成,两种写法效果一致。
对应的SQL语句如下:
SELECT * FROM sales_order WHERE DATE(created_at) = DATE_ADD(CURDATE(), INTERVAL 1 DAY);
⚠️ 注意:这种方法虽然简单,但因为对created_at字段使用了函数,会导致该字段上的索引失效,如果你的表数据量很大,查询性能可能会受影响。
方法二:范围查询(性能友好,推荐)
如果要利用created_at字段的索引,推荐使用范围查询来匹配明日的所有时间范围——也就是从明日00:00:00开始,到后天00:00:00之前的所有时间。
对应的SQL语句:
SELECT * FROM sales_order WHERE created_at >= DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND created_at < DATE_ADD(CURDATE(), INTERVAL 2 DAY);
这种写法既覆盖了明日所有的时分秒数据,又能正常使用索引,数据量大的时候优势很明显。
额外说明
如果你的业务场景真的需要精确匹配明日某个特定的时分秒(比如明日12:00:00),那直接把tomorrow_date替换成具体的datetime值即可,比如:
SELECT * FROM sales_order WHERE created_at = '2024-05-20 12:00:00';
不过从你的示例来看,应该是要匹配明日一整天的数据,上面两种方法就足够啦。
内容的提问来源于stack exchange,提问作者mileven
相关产品推荐
相关产品推荐

