我在我们的项目中使用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]}")