嘿我正在试图弄清楚如何将在mySQL中运行的语句转换为PostgreSQL,如果有人知道解决方案,那就很好奇。
这是在mySQL中有效的语句:
def self.by_name(keywords)
if keywords
find(:all, :conditions => ["concat(first_name," ",last_name) like?", "%#{keywords}%"])
end
end
这是我在this site上发现的基本上有类似问题的陈述,但它对我不起作用,如果我进行像Contact.by_name(“Bobby”)这样的搜索,没有结果。
def self.by_name(keywords)
if keywords
find(:all, :conditions => ["textcat(textcat(first_name,text ' '),last_name) like?", "%#{keywords}%"])
end
end
我的想法是,我可以搜索“Bobby”,“Fishcer”或“Bobby Fischer”,它可以匹配任何人的名字,姓氏或名字和姓氏。谢谢!
答案 0 :(得分:5)
您可以使用concatenation operator (||
)将所有内容粘贴在一起:
:conditions => [
"coalesce(first_name, '') || ' ' || coalesce(last_name, '') ilike '%' || ? || '%'",
keywords
]
您还会注意到我从字符串插值"%#{keywords}%"
切换到SQL '%' || ? || '%'
中的字符串连接,以构建搜索模式;这样做可以避免注射和引用问题。我也已切换到ilike
,因为你可能想要一个不区分大小写的搜索。