使用活动记录进行不区分大小写的搜索

2023-12-20

我使用rails 3.0.4

这是我的 Rails 应用程序中的一段 Arel 查询,如何使用 upcase 方法以与数据库无关的方式进行不区分大小写的搜索?

Customer.where("company_id = ? and (firstname like ? or lastname like ? or reference like ?)", current_user.company_id, "%#{params[:query]}%", "%#{params[:query]}%", "%#{params[:query]}%")

Thanks


这里有几个选项供您选择。

First, LIKE http://dev.mysql.com/doc/refman/5.5/en/pattern-matching.html已经不区分大小写,但对于 Postgres 你必须使用ILIKE http://www.postgresql.org/docs/8.3/static/functions-matching.html使您的搜索不区分大小写。

Customer.where('firstname LIKE ?', "%john%").first.name
=> 'John'

其次,如果您想使用不区分大小写与非模式匹配比较(例如 、=、

Customer.where('firstname COLLATE utf8_unicode_ci = ?', 'john').first.name
=> 'John'

看来Postgres没有COLLATE http://wiki.postgresql.org/wiki/Todo:Collate命令还没有,但您可以查看有关不区分大小写的搜索选项的更多信息here http://www.postgresql.org/docs/8.4/static/citext.html。一般来说,当您想要执行模式匹配或复杂查询时,您将无法以与数据库无关的方式执行此操作。我的建议是在开发和生产中使用单一数据库系统。这可确保您的查询在两种环境中的行为方式相同,从而减少错误。如果您确实需要支持多个数据库系统,那么最好的选择是简单地创建两个不同的查询 - 例如,一个在 MySQL 上运行,另一个在 Postgres 上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用活动记录进行不区分大小写的搜索 的相关文章

随机推荐