2012-11-26 51 views
3

如何去除變量周圍的引號,以便我可以在rails中使用find_by_sql中的LIKE運算符?Rails&MySQL - 如何在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'

回答

2

你可以使用concat數據庫裏面:

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

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

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

請注意,其他數據庫將希望看到'%' || ? || '%''%' + ? + '%'而不是concat調用。

+0

謝謝你,這個完美的作品! – JMT

3

而不是把百分比符號在SQL中,將它們添加到你注入變量(逃逸百分號後/強調已經存在!)

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

謝謝,這個作品完美! – JMT

2

@entries1 = Entry.select('name').where('name like ?',"%#{@something}%"])應該做同樣

1

搜索值周圍需要四個「%」,並且必須在每個分隔符之前加上分隔符「\」。

例如search_val可以是「」或「031」,等...

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