【问题标题】:how can I make this query not CaSeSeNsITIVe?我怎样才能使这个查询不是 CaSe SeNsITIVe?
【发布时间】:2019-11-24 14:26:12
【问题描述】:

如何使这个查询不区分大小写?

  @courses = Course.where('name LIKE ?', "%#{params[:name]}%")

【问题讨论】:

  • 您使用的是哪个 RDBMS:oracle、sql-server、mysql...请在您的问题中添加相关标签。

标签: sql ruby string where-clause sql-like


【解决方案1】:

一个典型的解决方案是在比较它们之前将两个值都转换为小写:

@courses = Course.where('LOWER(name) LIKE LOWER(?)', "%#{params[:name]}%")

根据您的 RDMBS,LOWER() 可能不可用。

还取决于您的 RDBMS,可能有更有效的选项可用(因为使用字符串函数基本上会破坏现有索引)。例如在 MySQL 中,您在相关列上设置不区分大小写的排序规则,这将使所有字符串比较默认不区分大小写,同时允许使用索引。

【讨论】:

    【解决方案2】:

    当您使用 Postgres 数据库时,您可能需要考虑 ILIKE,它是不区分大小写的 LIKE

    @courses = Course.where('name ILIKE ?', "%#{params[:name]}%")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      相关资源
      最近更新 更多