sql >> Databáze >  >> RDS >> PostgreSQL

Regex odstraní všechny výskyty více znaků v řetězci

Použijte mnohem rychlejší translate() pro tento jednoduchý případ:

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

Každý znak ve druhém parametru, který nemá protějšek ve třetím parametru, není nahrazen ničím.

Řešení regulárního výrazu by mohlo vypadat takto:

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

Základním prvkem je 4. parametr 'g' nahradit „globálně“ namísto pouhého prvního zápasu. Druhý parametr je třída znaků.
Byli jste na správné cestě, jen otázka syntaxe pro regexp_replace() .

Nápověda k UPDATE

Pokud neočekáváte vše řádky, které chcete změnit, důrazně doporučuji upravit UPDATE prohlášení:

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

Vyhnete se tak (drahým) prázdným aktualizacím. (NULL je v tomto konkrétním případě pokryto automaticky.)




  1. Získejte název měsíce z čísla v PostgreSQL

  2. Metoda hledání mezer v datech časových řad v MySQL?

  3. Oracle:Převod částky měny ve slovech pomocí PL/SQL

  4. Rails 3.1 - Pushing to Heroku - Chyby při instalaci postgres adaptéru?