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

查询PostgreSQL的time类型字段报invalid input syntax错误如何解决?

错误原因

你的assignments表start_time字段为PostgreSQL的time类型,仅存储时分秒信息,不包含日期。你请求中传入的参数是带日期的完整datetime格式2001-01-01T12:00:00,PostgreSQL无法直接将该格式的值转换为time类型用于范围查询,因此抛出格式错误。

你之前用limit(20)查询时没有用到传入的时间参数做过滤,不会触发类型转换,且Rails序列化time类型字段时会自动补一个默认的日期前缀(你输出中的2000-01-01就是这个默认前缀),所以JSON输出看起来和教程格式一致,仅在启用时间范围查询时才会暴露类型不匹配问题。


解决方案

根据你的业务场景二选一即可:

方案1:仅需按时间段查询(忽略日期,只匹配时分秒)

先提取参数中的时间部分再做查询,控制器代码修改如下:

def index
  # 解析传入的datetime参数,提取时分秒部分
  start_time = Time.zone.parse(params[:start_time])&.strftime("%H:%M:%S")
  end_time = Time.zone.parse(params[:end_time])&.strftime("%H:%M:%S")
  @assignments = Assignment.where(start_time: start_time..end_time)
end

对应的原生PostgreSQL查询语法为:

SELECT * FROM assignments WHERE start_time BETWEEN '12:00:00' AND '16:00:00';

方案2:业务需要关联日期存储排班时间

说明你字段类型选型错误,直接生成迁移把start_time、end_time字段改为datetime类型即可,无需修改查询逻辑,和教程保持一致就能正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:57:02