Cadenas

REGEXP_REPLACE

Sustituye las partes de una cadena que encajan con una expresión regular.

Sintaxis

REGEXP_REPLACE(<texto>, '<patrón>', <reemplazo>)
REGEXP_REPLACE(<texto>, '<patrón>', <reemplazo>, '<opciones>')

Como REPLACE, pero busca un patrón en lugar de un texto exacto: [0-9], cualquier cifra; ' +', uno o varios espacios seguidos. Sin opciones sustituye solo la primera aparición; la opción 'g' las sustituye todas, e 'i' no distingue mayúsculas.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Cifras por asteriscos
SELECT REGEXP_REPLACE('Card 4242 4242', '[0-9]', '*', 'g') AS hidden;
hidden
Card **** ****
Solo las cifras del teléfono
SELECT name, phone,
REGEXP_REPLACE(phone, '[^0-9]', '', 'g') AS digits
FROM employees;
namephonedigits
Emma+44 7700 900123447700900123
LiamNULLNULL
Olivia+44 7700 900456447700900456
Noah+44 7700 900789447700900789
SophiaNULLNULL

[^0-9] es cualquier carácter que no sea una cifra: el signo más y los espacios desaparecen.

Varios espacios en uno
SELECT REGEXP_REPLACE('Emma Wilson', ' +', ' ', 'g') AS cleaned;
cleaned
Emma Wilson

Ten en cuenta

Sin 'g' solo se sustituye la primera aparición: REGEXP_REPLACE('a1b2', '[0-9]', '') da ab2.

Un punto en el patrón significa «cualquier carácter»: REGEXP_REPLACE('v1.2.3', '.', '-', 'g') da ------. Escribe el propio punto como '\.' y obtendrás v1-2-3.

Para sustituir un texto exacto, REPLACE es más sencillo y más rápido.

Funciones relacionadas