La función REGEXP_REPLACE en PostgreSQL permite sustituir partes de una cadena que coincidan con una expresión regular específica por un nuevo valor. Esta función es útil cuando se necesita realizar reemplazos en textos de manera flexible, ya que trabaja con patrones y no solo con coincidencias exactas. A través de esta función, es posible realizar modificaciones precisas y complejas sobre los datos almacenados en una base de datos.
Englobada dentro de las funciones de cadena de PostgreSQL, REGEXP_REPLACE ofrece una poderosa herramienta para la manipulación de texto, permitiendo reemplazar no solo subcadenas exactas, sino también aquellas que siguen un patrón determinado. Esto la convierte en una opción ideal para tareas que requieren flexibilidad, como la limpieza de datos o la actualización de valores en múltiples registros.
A continuación, se mostrará la sintaxis y algunos ejemplos prácticos de cómo utilizar la función REGEXP_REPLACE.
Para más información, puedes consultar la documentación oficial de PostgreSQL.
Sintaxis
La sintaxis para utilizar la función REGEXP_REPLACE en PostgreSQL es la siguiente:
REGEXP_REPLACE(cadena, patrón, reemplazo [, indicador])
- REGEXP_REPLACE: es el nombre de la función.
- cadena: cadena a buscar.
- patrón: expresión regular.
- reemplazo: cadena por la que se sustituirá.
- indicador: parámetro para indicar opciones, en la mayoría de casos se utiliza el indicador g, ya que de lo contrario solo devolvería un resultado.
Ejemplo
Cambiar orden de palabras
En el siguiente ejemplo puedes observar como la columna nombre de la tabla empleados contiene el nombre y el apellido del empleado, pero necesitamos convertirlo al formato, apellido, nombre:
SELECT nombre, REGEXP_REPLACE(nombre,'(.*) (.*)','\2, \1') from empleados;

Eliminar letras
En el siguiente ejemplo eliminamos las letras del texto ‘ABC12345xyz’. :
SELECT REGEXP_REPLACE('ABC12345xyz','[[:alpha:]]','','g');
- [[:alpha:]]: coincide con cualquier letra.
- »; sustituimos las letras encontradas por un vacío.
- g: para que sustituya todas las letras que encuentre, no solo la primera.

Eliminar dígitos
En el siguiente ejemplo eliminamos los dígitos del texto ‘ABC12345xyz’. :
SELECT REGEXP_REPLACE('ABC12345xyz','[[:digit:]]','','g');
- [[:digit:]]: coincide con cualquier dígito.
- »; sustituimos los dígitos encontradas por un vacío.
- g: para que sustituya todas las letras que encuentre, no solo la primera.

Eliminar espacios
En el siguiente ejemplo eliminamos los espacios cuando hay más de uno seguido:
SELECT REGEXP_REPLACE('Miguel Troyano no sabe escribir','( ){2,}',' ','g');
- ‘( ){2,}’: busca el espacio cuando ocurra más de dos veces seguidas.
- ‘ ‘; sustituimos cuando encuentre un resultado por un espacio.
- g: para que sustituya todas las veces que lo encuentra.
