【问题标题】:How to make LIKE clause case-insensitive?如何使 LIKE 子句不区分大小写?
【发布时间】:2017-01-23 01:13:02
【问题描述】:

我在 Ruby On Rails 中使用了 LIKE 子句。当我尝试通过键入 "more" 来搜索记录时,它不会返回任何内容,但是当我使用 "More" 时,它会返回包含 "More" 的记录strong>More 关键字,因此它的行为似乎区分大小写。

是否可以不区分大小写?

这是我目前使用的查询:

Job.where('title LIKE ? OR duration LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%")

【问题讨论】:

    标签: ruby-on-rails ruby postgresql activerecord


    【解决方案1】:

    我假设您正在使用 Postgres。

    您可以使用ILIKE

    Job.where('title ILIKE ? OR duration ILIKE ?', "%#{params[:search]}%", "%#{params[:search]}%")
    

    或者一些棘手的 hack lower():

    Job.where('lower(title) LIKE lower(?) OR lower(duration) LIKE lower(?)', "%#{params[:search]}%", "%#{params[:search]}%")
    

    【讨论】:

    • 好的,非常感谢,您能建议使用哪一个吗?
    • LIKE/ILIKE 首选,因为它更干净。
    • 好的,我还有一个问题,在这里发布stackoverflow.com/questions/39462428/… 如果您知道解决方案,请在那里回答,非常感谢,谢谢
    • 您可以使用命名占位符更优雅地编写此代码。 Job.where('title ILIKE :s OR duration ILIKE :s', s: "%#{params[:search]}%")
    【解决方案2】:

    试试这样的

    def query_job(query)
      job_query = "%#{query.downcase}%"
      Job.where("lower(title) LIKE ? or lower(duration) LIKE ?", job_query, job_query) 
    end 
    
    query_job(params[:search])
    

    【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2013-09-22
    • 2018-10-04
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2014-08-19
    • 2014-10-11
    相关资源
    最近更新 更多