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

Postgres查询本应返回有效数据却返回空结果问题咨询

问题根因

PostgreSQL 中 BETWEEN 左边界 AND 右边界 的语义是判断目标值满足 >= 左边界 且 <= 右边界,仅当左边界 <= 右边界时才可能返回匹配结果。
你当前的查询条件存在逻辑错误:

  • 左边界 M.PLAYED_AT - M.STARTED_PREDICTION 是比赛时间往前推48小时,是更早的时间点
  • 右边界 M.PLAYED_AT - M.ENDED_PREDICTION 是比赛时间往前推2小时,虽然晚于左边界,但仍然早于 M.PLAYED_AT 本身

目标判断值 M.PLAYED_AT 永远大于右边界,不可能满足 <= 右边界的条件,因此查询永远返回空结果。

修正方案

场景1:常规业务需求(查询可预测阶段的比赛)

如果你的业务目标是筛选**当前时间处于可预测窗口期(比赛开始前48小时到比赛开始前2小时)**的比赛,将判断值替换为当前时间即可,修正后语句:

SELECT * from matches m WHERE now() BETWEEN (M.PLAYED_AT - M.STARTED_PREDICTION) AND (M.PLAYED_AT - M.ENDED_PREDICTION);

场景2:仅做语法逻辑修正

如果你确实需要以M.PLAYED_AT为判断值,只需要调整边界顺序或者修正区间逻辑即可,示例(无实际业务意义,仅作语法参考):

-- 调整边界顺序,判断值落在右边界到左边界的区间(注意需要把更小的值放前面)
SELECT * from matches m WHERE M.PLAYED_AT BETWEEN (M.PLAYED_AT - M.ENDED_PREDICTION) AND (M.PLAYED_AT + M.STARTED_PREDICTION);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:06