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
相关产品推荐
相关产品推荐

