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

如何过滤负Interval值?比较操作报错且无法修改列类型

解决PostgreSQL中Interval类型无法与0比较的问题

错误原因

PostgreSQL没有定义interval类型与整数0之间的比较运算符,所以直接写ride_length < 0会触发类型不匹配的错误。

两种可行解决方案

方案1:直接比较原始时间戳列(推荐,性能更优)

跳过提前计算ride_length的步骤,直接通过原始的started_at和ended_at判断正负,无需类型转换:

  • 若要过滤掉负值(保留ride_length非负的记录):
SELECT started_at - ended_at AS ride_length
FROM [dbo]
WHERE started_at >= ended_at;
  • 若要筛选出负值的记录:
SELECT started_at - ended_at AS ride_length
FROM [dbo]
WHERE started_at < ended_at;

方案2:将Interval转换为数值类型比较

用EXTRACT(EPOCH FROM ...)把interval转换成以秒为单位的数值,即可和0直接比较:

  • 过滤掉负值(保留非负记录):
SELECT started_at - ended_at AS ride_length
FROM [dbo]
WHERE EXTRACT(EPOCH FROM (started_at - ended_at)) >= 0;
  • 筛选负值记录:
SELECT started_at - ended_at AS ride_length
FROM [dbo]
WHERE EXTRACT(EPOCH FROM (started_at - ended_at)) < 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:32:34