gpt4 book ai didi

mySQL to PostgreSQL concat first name and last name for name search (Ruby on Rails)

转载 作者:可可西里 更新时间:2023-11-01 07:59:40 27 4
gpt4 key购买 nike

嘿,我正在尝试弄清楚如何将在 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”,它会匹配具有该名字、姓氏或同时具有名字和姓氏的任何人。谢谢!

最佳答案

您可以使用 concatenation operator (||)将所有内容粘贴在一起:

:conditions => [
"coalesce(first_name, '') || ' ' || coalesce(last_name, '') ilike '%' || ? || '%'",
keywords
]

您还会注意到,我从字符串插值 "%#{keywords}%" 切换到 SQL 中的字符串连接,'%' || ? || '%',构建搜索模式;这样做可以避免注入(inject)和引用问题。我也切换到 ilike因为您可能需要不区分大小写的搜索。

关于mySQL to PostgreSQL concat first name and last name for name search (Ruby on Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219436/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com