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

PostgreSQL查询未正确过滤注册日期不足30天的司机故障排查

问题根因

你写的过滤条件逻辑顺序颠倒了:
v.registration_date::DATE - CURRENT_DATE::DATE < 30
你插入的测试数据中所有车辆注册日期都远早于当前日期,较早的日期减去较晚的日期得到的计算结果都是负数,所有负数天然满足<30的判断条件,因此全部数据都被返回。

修正方案

方案1:调整减法顺序(按自然日30天判断)

将日期减法的顺序调换,计算当前日期和注册日期的差值小于30即可:

select d.first_name , d.last_name , v.make
from drivers d
join vehicles v
on v.driver_id= d.id
where CURRENT_DATE - v.registration_date < 30;

方案2:按自然月判断(更贴合「不足1个月」的需求)

如果要严格匹配「注册日期距离当前不足1个自然月」的需求,更推荐用日期间隔判断,避免不同月份天数不同导致的逻辑偏差:

select d.first_name , d.last_name , v.make
from drivers d
join vehicles v
on v.driver_id= d.id
where v.registration_date >= CURRENT_DATE - INTERVAL '1 month';

注意:你当前插入的测试数据中所有注册日期均为多年前的历史日期,修改语句后查询结果会为空,你可以将任意一条测试数据的registration_date修改为最近1个月内的日期,即可得到预期的仅返回1条符合条件数据的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:36:05