【发布时间】: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
如何使这个查询不区分大小写?
@courses = Course.where('name LIKE ?', "%#{params[:name]}%")
【问题讨论】:
标签: sql ruby string where-clause sql-like
一个典型的解决方案是在比较它们之前将两个值都转换为小写:
@courses = Course.where('LOWER(name) LIKE LOWER(?)', "%#{params[:name]}%")
根据您的 RDMBS,LOWER() 可能不可用。
还取决于您的 RDBMS,可能有更有效的选项可用(因为使用字符串函数基本上会破坏现有索引)。例如在 MySQL 中,您在相关列上设置不区分大小写的排序规则,这将使所有字符串比较默认不区分大小写,同时允许使用索引。
【讨论】:
当您使用 Postgres 数据库时,您可能需要考虑 ILIKE,它是不区分大小写的 LIKE:
@courses = Course.where('name ILIKE ?', "%#{params[:name]}%")
【讨论】: