【问题标题】:Rails SQL query with % Wildcards works in SQLite but not PostgreSQL?带有%通配符的 Rails SQL 查询在 SQLite 中有效,但在 PostgreSQL 中无效?
【发布时间】:2010-07-01 19:39:31
【问题描述】:

我有一个用于搜索的查询:条件如下:

:conditions => ['family_name LIKE ? OR given_name LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%"]

查询在 SQLite 上本地运行良好,但是当我在 PostgreSQL 上推送到 Heroku 时,只有第一个 % 对 family_name 和 given_name 都有效。换句话说,它将匹配出现在单词末尾而不是开头或中间的关键字。

示例: 有一条现有记录:family_name => "Washington" 和 :given_name => "George"

搜索“ington”或“rge”将检索此记录。不会搜索“Wash”或“Geo”。

我是新用户,对 Rails 很陌生。提前感谢您的帮助。


解决方案

相关话题: 1 2

这是我正在使用的修复:

:conditions => ['LOWER(family_name) LIKE ? OR LOWER(given_name) LIKE ?', "%#{params[:search].downcase}%", "%#{params[:search].downcase}%"]

【问题讨论】:

    标签: ruby-on-rails postgresql wildcard


    【解决方案1】:

    LIKE 是 Postgres 中区分大小写的运算符。对于不区分大小写的模式匹配,请使用 ILIKEother standard methods

    【讨论】:

    • 我从未想过区分大小写的查询。非常感谢。我最终将查询中的所有内容都设置为小写,因为它与两种类型的数据库都兼容。编辑:为问题添加了最终代码。
    猜你喜欢
    • 2014-07-30
    • 2013-01-24
    • 2020-06-06
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多