2011-11-21 176 views
2

PostrgeSQL like函数是如何工作的?我正在使用令牌输入来限制只有现有值的用户输入。PostgreSQL像不返回匹配的实例

我有以下值在DB:

`Yellow, White, Orange...` 

我的代码

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

如果我在w例如White键入不建议。我必须输入第二个字母才能看到White提出的建议。由于Db值都以大写字母开头,我怀疑它与SQLite有所不同。

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

+2

存储逗号分隔值通常是有问题的数据库设计的符号。 –

回答

0

LIKE的区分大小写取决于您使用的数据库。有些数据库在使用LIKE时会忽略大小写,有些则不会,有些则会查看各种配置选项。解决此的一种方式是通过转换为大写或小写自己正常化的情况下:

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

谢谢。它适用于PostgreSQL和SQLite。 – Gaelle

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字符。

+0

感谢您的全面解释。 – Gaelle