sql - Like 查询不返回预期结果

标签 sql ruby-on-rails postgresql

我在项目中使用 Rails 4.2,数据库使用 postgresql。

当我应用“喜欢”查询时,我没有得到正确的结果。请阅读下面的完整说明。

Campaign.where('lower (brand_name) LIKE ?', "%#{params[:brand_name]}%")

现在这个查询有什么问题,假设我已经用 brand_name("brand-10%") 创建了记录,然后我通过传递参数 来搜索记录,比如 "10% " 在 brand_name 列中,此查询未返回准确的记录。它返回所有以“10”作为品牌名称的记录。

我检查了查询,它正在使 SQL 查询如下:

SELECT "campaigns".* FROM "campaigns" WHERE (lower (brand_name) LIKE '%10%%')

但现在我想要的类似查询应该应用于“10%”而不是“10”。

最佳答案

发生这种情况是因为 %是通配符,匹配0个或多个字符。所以有 %%在字符串的末尾 '%10%%''%10%' 没有什么不同.

您需要转义第一个 %使其与文字百分号相匹配。根据 postgresql 手册,您需要使用默认为 \ 的转义字符作为前缀。 .可惜\是 ruby​​ 的转义字符,所以你需要使用 \\意思是\ .

To match a literal underscore or percent sign without matching other characters, the respective character in pattern must be preceded by the escape character. The default escape character is the backslash but a different one can be selected by using the ESCAPE clause. To match the escape character itself, write two escape characters.

http://www.postgresql.org/docs/current/static/functions-matching.html

我对 ruby​​-on-rails 不熟悉,只是对 postgresql 不熟悉。完全脱离了我的头脑,这看起来像:

Campaign.where("lower (brand_name) LIKE '%' || replace(?, '%', '\\%') || '%'", "#{params[:brand_name]}")

关于sql - Like 查询不返回预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36715574/

相关文章:

ruby-on-rails - 如何使用不同的名称为同一个模型创建两个关系?

c# - PostgreSQL:函数返回多个记录集:如何在 C# 中读取?

mysql - 如何在 SQL 中执行迭代

java - sql查询值中包含空格

mysql - 基于其他列过滤列的 SQL 查询

sql - 从 CSV 文件将数据导入 SQL 表并考虑外键

postgresql - 如何在 PL/TCL 中访问 PostgreSQL 数组

sql - 将多行转换为多列

ruby-on-rails - 为什么我的 rails 路线有点偏离?

ruby-on-rails - 您正在尝试在更改 Gemfile 后以部署模式安装