【问题标题】:Finding words with and without whitespaces in Rails and Postgresql在 Rails 和 Postgresql 中查找带和不带空格的单词
【发布时间】:2015-08-31 00:14:56
【问题描述】:

我正在尝试找出可以在 Ruby on Rails 中使用的语句,该语句执行 SQL 查询以匹配可能有也可能没有任何空格的单词与可能有也可能没有空格的相似单词。 例如:

马修·琼斯 或者 马修琼斯

应该匹配

马修·琼斯 或者 马修琼斯

【问题讨论】:

    标签: sql ruby-on-rails ruby regex postgresql


    【解决方案1】:

    您可以使用 postgres REPLACE 函数来做到这一点:

    SELECT * FROM mytable 
        WHERE REPLACE(username, ' ', '') = REPLACE("Matthew Jones", ' ', '')
    

    它将匹配MatthewJonesMatthew Jones

    你可以在 ActiveRecord 查询中这样写:

    MyTable.where("REPLACE(username, ' ', '') = REPLACE('John Bob Jones', ' ', '')")
    

    更新:

    您可以使用ILIKE 使查询不区分大小写:

    User.where("REPLACE(username, ' ', '') ILIKE REPLACE(?, ' ', '')", "John Bob Jones")
    

    【讨论】:

      【解决方案2】:

      感谢那个 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")
      

      【讨论】:

      • 当然你可以做到。如果我的回答帮助您解决了问题,请考虑接受/支持我的回答。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多