如何使postgresql搜索方法不区分大小写?

时间:2015-05-04 14:26:50

标签: sql ruby-on-rails ruby postgresql

我刚从sqlite3切换到postgresql-9.4。之前,当我使用我的方法" typeahead"进行搜索时,我会得到不区分大小写的结果。但是现在我切换了,这个方法突然区分大小写。如何使用postgresql使方法不区分大小写?

def typeahead
  q = params[:query]
  render json: Subject.where('name like ? OR second_name like ? OR keywords like ?', "%#{q}%", "%#{q}%", "%#{q}%")
end

3 个答案:

答案 0 :(得分:6)

我认为您可以使用ILIKE而不是LIKE

 Subject.where('name ilike ? OR second_name ilike ? OR keywords ilike ?', "%#{q}%", "%#{q}%", "%#{q}%")

或简化一点

 Subject.where('name ilike :name OR second_name ilike :name OR keywords ilike :name', name: "%#{q}%")

答案 1 :(得分:4)

您也可以使用" ilike"关键字代替"喜欢"。

答案 2 :(得分:2)

常见的方法是这样做:

Subject.where('LOWER(name) like ?, "%#{q.downcase}%")

请注意,如果遇到性能问题,可能需要创建小写索引。请参阅:How do I create an index in PostgreSQL based on lowercase only?