2

私の PostgreSQL では(;<>)、文字列内のすべての文字の出現を置き換えたいと考えています。

私のクエリ:

update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');

私の正規表現が間違っていると思います。誰でも私を助けてくれますか?

4

1 に答える 1

7

translate()この単純なケースでは、より高速な を使用します。

UPDATE tbl SET text = translate(text, '(;<>)', '');

3 番目のパラメーターに対応する文字がない 2 番目のパラメーターのすべての文字は、何も置き換えられません。

正規表現のソリューションは次のようになります。

regexp_replace(text, '[(;<>)]', '', 'g');

エッセンシャル エレメントは'g'、最初の一致だけでなく、"globally" を置き換える 4 番目のパラメーターです。2 番目のパラメーターは文字クラスです。
の構文の問題だけで、正しい軌道に乗っていましたregexp_replace()

ヒントUPDATE

すべての行が変更されるとは思わない場合は、UPDATEステートメントを変更することを強くお勧めします。

UPDATE tbl
SET    text =  translate(text, '(;<>)', '')
WHERE  text <> translate(text, '(;<>)', '');

このようにして、(高価な)空の更新を回避します。(NULLこの特定のケースでは自動的にカバーされます。)

于 2013-02-19T08:48:53.167 に答える