如何删除变量周围的引号,以便在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'
答案 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}\%\%'" ])