Like Query未返回预期结果



我在我们的项目中使用Rails 4.2,并为数据库使用postgresql。

当我使用"赞"查询时,没有得到正确的结果。请阅读下面的完整描述。

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

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

我已经检查了查询,它正在进行SQL查询,如:

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

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

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

您需要转义第一个%,使其与文字百分号匹配。根据postgresql手册,您需要在其前面加上默认为的转义符。不幸的是,是ruby的转义符,所以您需要使用\来表示

匹配文字下划线或百分号而不匹配其他字符,模式中相应的字符前面必须有转义字符。默认的转义符是反斜杠但是可以通过使用ESCAPE子句来选择不同的一个。到匹配转义符本身,编写两个转义符。

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

我对ruby on rails不太熟悉,只是对postgresql不太熟悉。完全出乎我的意料,这看起来像:

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

最新更新