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

Rails应用按年份筛选报错:SQLite3::SQLException: near "from"语法错误

Rails按年份筛选SQLite报错:SQLite3::SQLException: near "from": syntax error

问题根源是SQLite不支持EXTRACT(year FROM sort_date)这种语法,这是PostgreSQL、MySQL等数据库的写法,SQLite有自己的日期函数规则。

修复方案是改用SQLite的strftime函数提取年份,它会返回四位数字的年份字符串,和你传入的params[:year]字符串可以直接匹配:

@posts = Post.where("strftime('%Y', sort_date) = ?", params[:year])
             .paginate(page: params[:page], per_page: 5)
             .order(sort_date: :desc)
render 'index'

如果希望用整数类型对比(避免字符串匹配的潜在问题),可以把双方都转成整数:

@posts = Post.where("strftime('%Y', sort_date)::integer = ?", params[:year].to_i)
             .paginate(page: params[:page], per_page: 5)
             .order(sort_date: :desc)
render 'index'

补充说明:如果后续项目要切换到PostgreSQL等其他数据库,可以改用数据库通用的DATE_PART函数,但当前针对SQLite环境,必须使用strftime才能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:35:14