sql >> Base de Datos >  >> RDS >> PostgreSQL

Regex elimina todas las ocurrencias de múltiples caracteres en una cadena

Use el mucho más rápido translate() para este caso simple:

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

Cada carácter en el segundo parámetro que no tiene equivalente en el tercer parámetro se reemplaza por nada.

La solución de expresión regular podría verse así:

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

El elemento esencial es el cuarto parámetro 'g' para reemplazar "globalmente" en lugar de solo la primera coincidencia. El segundo parámetro es una clase de carácter.
Estabas en el camino correcto, solo una cuestión de sintaxis para regexp_replace() .

Sugerencia sobre UPDATE

Si no esperas todas filas a cambiar, le recomiendo encarecidamente que adapte su UPDATE declaración:

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

De esta forma evita actualizaciones vacías (costosas). (NULL se cubre automáticamente en este caso particular).