私の PostgreSQL では(;<>)、文字列内のすべての文字の出現を置き換えたいと考えています。
私のクエリ:
update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');
私の正規表現が間違っていると思います。誰でも私を助けてくれますか?
私の PostgreSQL では(;<>)、文字列内のすべての文字の出現を置き換えたいと考えています。
私のクエリ:
update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');
私の正規表現が間違っていると思います。誰でも私を助けてくれますか?
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この特定のケースでは自動的にカバーされます。)