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

Rails项目PostgreSQL数据库strftime函数报错求助

解决PostgreSQL下strftime函数不存在的错误

嘿,我一眼就看出问题啦!你现在用的是PostgreSQL数据库,但查询语句里用了SQLite专属的strftime函数——PostgreSQL根本不认识它,这就是报错的核心原因。

问题根源

PostgreSQL没有strftime这个函数,它有自己的日期格式化函数to_char。不过更推荐你用Rails内置的日期查询方法,这样既优雅又能跨数据库兼容(不管是SQLite、PostgreSQL还是MySQL都能正常工作)。

解决方案1:改用PostgreSQL的to_char函数

如果你想继续用原生SQL的方式,可以把strftime换成to_char:

def today
  @vlts = Vlt.where("to_char(date_time, 'DD/MM/YYYY') = ?", Time.now.strftime('%d/%m/%Y'))
end

解决方案2:更优雅的Rails风格查询(推荐)

Rails提供了非常方便的日期范围查询方法,完全不用写原生SQL字符串,代码可读性和兼容性都更好:

def today
  # 方法一:明确指定当日的时间范围
  @vlts = Vlt.where(date_time: Time.zone.today.beginning_of_day..Time.zone.today.end_of_day)
  
  # 方法二:用Rails的快捷方法all_day,效果和上面完全一致
  # @vlts = Vlt.where(date_time: Date.today.all_day)
end

这个方法会自动生成适配当前数据库的SQL语句,比如在PostgreSQL里会转换成:

SELECT "vlts".* FROM "vlts" WHERE "vlts"."date_time" BETWEEN '2018-01-18 00:00:00' AND '2018-01-18 23:59:59.999999'

不仅避免了函数兼容问题,还能利用数据库的索引(如果date_time字段有索引的话),查询效率更高。

视图验证

你的视图代码完全没问题,只要@vlts能正确获取到当日的预订数据,循环就能正常渲染出表格行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:34:18