【发布时间】:2015-08-31 00:14:56
【问题描述】:
我正在尝试找出可以在 Ruby on Rails 中使用的语句,该语句执行 SQL 查询以匹配可能有也可能没有任何空格的单词与可能有也可能没有空格的相似单词。 例如:
马修·琼斯 或者 马修琼斯
应该匹配
马修·琼斯 或者 马修琼斯
【问题讨论】:
标签: sql ruby-on-rails ruby regex postgresql
我正在尝试找出可以在 Ruby on Rails 中使用的语句,该语句执行 SQL 查询以匹配可能有也可能没有任何空格的单词与可能有也可能没有空格的相似单词。 例如:
马修·琼斯 或者 马修琼斯
应该匹配
马修·琼斯 或者 马修琼斯
【问题讨论】:
标签: sql ruby-on-rails ruby regex postgresql
您可以使用 postgres REPLACE 函数来做到这一点:
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("Matthew Jones", ' ', '')
它将匹配MatthewJones 和Matthew Jones。
你可以在 ActiveRecord 查询中这样写:
MyTable.where("REPLACE(username, ' ', '') = REPLACE('John Bob Jones', ' ', '')")
您可以使用ILIKE 使查询不区分大小写:
User.where("REPLACE(username, ' ', '') ILIKE REPLACE(?, ' ', '')", "John Bob Jones")
【讨论】:
感谢那个 Rakibul。我已将“=”替换为“ILIKE”,这样它也不区分大小写:
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') ILIKE REPLACE("Matthew Jones", ' ', '')
使用 Ruby on Rails 中的 Active Record 查询接口来做到这一点:
User.where("REPLACE(username, ' ', '') ILIKE REPLACE(?, ' ', '')", "Matthew Jones")
【讨论】: