Rails& MySQL - 如何在rails中的find_by_sql中使用LIKE运算符和%?

时间:2012-11-26 05:44:48

标签: mysql ruby-on-rails find-by-sql

如何删除变量周围的引号,以便在rails中的find_by_sql中使用LIKE运算符?

@entries1 = Entry.find_by_sql(["SELECT `entries`.name as name FROM `entries` where `entries`.name like '%?%'",@something])

将产生

SELECT `entries`.name as name FROM `entries` where `entries`.name like '%'hello'%'

@something = 'hello'

4 个答案:

答案 0 :(得分:3)

不是将百分号放在SQL中,而是将它们添加到您注入的变量中(在转换已经存在的百分号/下划线之后!)

"%#{@something.gsub('%', '\%').gsub('_', '\_')}%"

答案 1 :(得分:2)

您可以在数据库中使用concat

Entry.find_by_sql([
  "SELECT ... `entries`.name like concat('%', ?, '%')",
  @something
])

或者你可以在Ruby中添加通配符:

Entry.find_by_sql([
  "SELECT ... `entries`.name like ?",
  "%#{@something}"
])

请注意,其他数据库希望看到'%' || ? || '%''%' + ? + '%'而不是concat来电。

答案 2 :(得分:2)

@entries1 = Entry.select('name').where('name like ?',"%#{@something}%"])应该做同样的事情

答案 3 :(得分:1)

搜索值周围需要四个'%',并且必须在每个前面加上分隔符'\'。

例如search_val可以是“”或“031”等......

find_by_sql([ "select  * from tableX where id like '\%\%#{search_val}\%\%'" ])