PostgreSQL 喜欢不返回匹配的实例

发布于 2024-12-17 13:25:54 字数 517 浏览 0 评论 0原文

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

我在数据库中有以下值:

  `Yellow, White, Orange...`

我的代码

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

如果我输入 w 例如,不建议使用 White 。我必须输入第二个字母才能看到怀特的提议。因为 Db 值全部以大写字母开头,所以我怀疑与 SQLite 存在差异。

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

How does the PostrgeSQL like function work? I'm using token inputs to limit input from user with only existing values.

I have the following values in the DB:

  `Yellow, White, Orange...`

My Code

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

If I type in w for example White is not proposed. I have to type in second letter to see White proposed. Because Db values all start by Capital letter I suspect a difference with SQLite.

I found this post which mentions ILIKE but was wondering if there is some common code that work both with Postgres and SQLite.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

但可醉心 2024-12-24 13:25:54

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

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

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

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

最后一行主要在两者中都有效 SQLitePostgreSQL< /a>.我添加了相应手册页的链接。

有一个限制:SQLite 只能识别小写/大写的 ASCII 字符,而 PostgreSQL 也可以识别其他 UTF-8 字符。

The SQLite LIKE operator is case insensitive per default.
In PostgreSQL ILIKE is the case insensitive version of LIKE. There are also operators:

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

These three expressions are all effectively the same in PostgreSQL:

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

The last line mostly works in both SQLite and PostgreSQL. I added links to the respective manual pages.

A limitation applies: SQLite only understands lower / upper case of ASCII characters, while PostgreSQL understands other UTF-8 characters, too.

一花一树开 2024-12-24 13:25:54

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

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

The case-sensitivity of LIKE depends on the database you use. Some databases ignore case when using LIKE, some don't, some look at various configuration options. One way around this is to normalize the case yourself by converting to upper or lower case:

@colors = Color.where("lower(name) like ?", "%#{params[:q].downcase}%")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文