私の 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
この特定のケースでは自動的にカバーされます。)