首页 > 解决方案 > 在使用正则表达式查询之前从 Postgres DB 中的字段中删除标点符号

问题描述

我找不到这个问题的答案,我真的很想解决这个问题,所以非常感谢任何帮助。

我有一张公司表,其中一家公司是“JPMorgan Chase Bank, NA”。

我想删除名称中的所有标点符号(因此“JPMorgan Chase Bank, NA”变为“JPMorgan Chase Bank NA”)

这是我最接近的:

Company.where("replace(name, '.', '') ILIKE ?", "JPMorgan Chase Bank, N A%")
=> [#<Company:0x00007ff8201f2b90 id: 25, name: "JPMorgan Chase Bank, N.A.", created_at: Mon, 31 May 2021 09:26:57 UTC +00:00, updated_at: Mon, 31 May 2021 09:26:57 UTC +00:00>]

这有效,但它只删除.(我已将逗号留在数据库中的字段中)。我想删除所有标点符号,所以我尝试了以下操作:

Company.where("replace(name, '.,-:', ' ') ILIKE ?", "JPMorgan Chase Bank, N A%")
Company.where("replace(name, '[.,-:]', ' ') ILIKE ?", "JPMorgan Chase Bank, N A%")
Company.where("replace(name, /[^[:word:]\s]/, ' ') ILIKE ?", "JPMorgan Chase Bank, N A%")

我似乎不知道如何用单个字符替换一系列字符

标签: ruby-on-railsregexrubyactiverecord

解决方案


知道了!

Company.where("regexp_replace(name, '[[:punct:]]', '', 'g') ILIKE ?", "JPMorgan Chase Bank NA%")

我需要使用regexp_replace,并且需要将其添加g为最后一个参数。

那是一个令人头疼的问题-我希望您已经找到了解决问题的方法。


推荐阅读