PostgreSQL喜欢不返回匹配的实例

问题描述 投票:2回答:2

PostgreSQL like函数如何工作?我正在使用令牌输入来限制用户仅使用现有值的输入。

我在DB中有以下值:

  `Yellow, White, Orange...`

我的守则

 @colors = Color.where("name like ?", "%#{params[:q]}%")

如果我输入w例如White不建议。我必须在第二封信中输入白色建议。因为Db值全部以大写字母开头,所以我怀疑与SQLite有所不同。

我发现这个post提到ILIKE但是想知道是否有一些与Postgres和SQLite兼容的通用代码。

postgresql sqlite pattern-matching sql-like
2个回答
0
投票

LIKE的区分大小写取决于您使用的数据库。有些数据库在使用LIKE时会忽略大小写,有些则不会,有些会查看各种配置选项。解决这个问题的一种方法是通过转换为大写或小写来自己规范化案例:

@colors = Color.where("lower(name) like ?", "%#{params[:q].downcase}%")

2
投票

SQLite LIKE运算符默认情况下不区分大小写。 在PostgreSQL中,ILIKELIKE不区分大小写的版本。还有运营商:

~~   .. LIKE
~~*  .. ILIKE
!~~  .. NOT LIKE
!~~* .. NOT ILIKE

这三个表达式在PostgreSQL中实际上是相同的:

name ilike '%w%'
name ~~*   '%w%'
lower(name) like lower('%w%')

最后一行主要适用于SQLitePostgreSQL。我添加了相应手册页的链接。

限制适用:SQLite只能理解ASCII字符的大小写,而PostgreSQL也能理解其他UTF-8字符。

© www.soinside.com 2019 - 2024. All rights reserved.