You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

alerts表查询targetDate超45天数据无结果的问题排查

解决你的SQL查询无结果问题

嘿,我来帮你拆解下为什么你的查询没返回数据,以及怎么修正它:

先看数据里的关键问题

你的alerts表中targetDate有两种情况,都是导致查询空结果的原因:

  • 无效日期0000-00-00:MySQL对这种无效日期用DATEDIFF()计算时会返回NULL,而NULL > 45的判断结果是不成立的,所以这类记录不会被选出来。
  • 有效日期的时间差不够:看表中的有效targetDate,比如2018-04-01、2018-05-01,假设你是在createDate对应的2018-05-02左右执行的查询,那2018-04-01和当天的天数差只有31天,远小于45天;剩下的有效日期都是未来的(比如2018-06-01、2018-08-01),这时候DATEDIFF(CURDATE(), targetDate)会得到负数,肯定不满足>45的条件。

给你几个修正后的查询选项

根据你的实际需求,选对应的语句:

1. 只筛选有效的、距今超45天的过去日期

如果0000-00-00是无效数据,想排除它们,用这个:

SELECT userID, refID, `targetDate` 
FROM alerts 
WHERE type = 'travelSoon' 
  AND targetDate != '0000-00-00'
  AND DATEDIFF(CURDATE(), targetDate) > 45;

2. 把0000-00-00也视为符合条件的记录

如果这类无效日期需要被包含进来,就加个OR条件:

SELECT userID, refID, `targetDate` 
FROM alerts 
WHERE type = 'travelSoon' 
  AND (targetDate = '0000-00-00' OR DATEDIFF(CURDATE(), targetDate) > 45);

另外补充一点:如果targetDate带时间部分,CURDATE()只取日期,DATEDIFF()会自动忽略时间差,这个是符合逻辑的,不用额外处理。


内容的提问来源于stack exchange,提问作者Roi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:56:49