首页 > 解决方案 > 我怎样才能使这个查询不是 CaSeSeNsITIVe?

问题描述

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

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

标签: sqlrubystringwhere-clausesql-like

解决方案


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

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

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

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


推荐阅读