PostgreSQL喜欢不返回匹配的实例

时间:2011-11-21 20:26:13

标签: postgresql sqlite pattern-matching sql-like

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

我在DB中有以下值:

  `Yellow, White, Orange...`

我的代码

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

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

我发现这个post提到ILIKE,但是想知道是否有一些公共代码可以与Postgres和SQLite一起使用。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

答案 1 :(得分:0)

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

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