Contenido de esta guía
Qué hace REPLACE
REPLACE recibe un texto, el fragmento que quieres buscar y el fragmento que debe ocupar su lugar. Devuelve una nueva cadena con todas las coincidencias sustituidas.
La función trabaja dentro de una expresión. En un SELECT no cambia la tabla. Para guardar la transformación sería necesario utilizar UPDATE de forma deliberada y segura.
Sintaxis básica
REPLACE(texto, fragmento_buscado, sustituto)La búsqueda distingue caracteres según las reglas del motor y su configuración. Si el fragmento no aparece, el texto se devuelve sin cambios.
Ejemplo guiado
Queremos crear una versión visual del nombre de producto donde los espacios se conviertan en guiones:
SELECT nombre,
REPLACE(nombre, ' ', '-') AS nombre_con_guiones
FROM productos
ORDER BY id
LIMIT 6;| nombre | nombre_con_guiones |
|---|---|
| Ratón | Ratón |
| Teclado | Teclado |
| Monitor 24 | Monitor-24 |
| Portátil Pro | Portátil-Pro |
| Auriculares | Auriculares |
| Monitor 27 | Monitor-27 |
Cómo leer el resultado
- Los nombres sin espacios permanecen iguales.
- Cada espacio encontrado se sustituye por un guion.
- La columna
nombreoriginal sigue intacta.
Una sustitución no valida el formato. Esta consulta sirve para presentar o preparar texto. Crear identificadores únicos, correos válidos o URLs seguras requiere reglas adicionales.
Error frecuente
Confundir la función con una sentencia de escritura
En algunos motores existe una sentencia o variante llamada REPLACE relacionada con insertar o sustituir filas. No es lo mismo que la función de texto de tres argumentos.
SELECT REPLACE(nombre, ' ', '-')
FROM productos;Comprueba siempre si estás usando una expresión dentro de SELECT o una sentencia que puede modificar datos.
Comprueba lo aprendido
Crea correos de demostración
Muestra el nombre y cambia el dominio @example.test por @demo.local. Excluye las filas cuyo correo sea NULL, ordena por id y limita el resultado a cinco filas.
Solución razonada
SELECT nombre,
REPLACE(email, '@example.test', '@demo.local') AS email_demo
FROM clientes
WHERE email IS NOT NULL
ORDER BY id
LIMIT 5;El filtro evita aplicar la función a correos ausentes. La transformación solo aparece en email_demo.
Cambia una etiqueta sin modificar el estado original
Muestra los pedidos del 101 al 106 con id, estado y una columna estado_visible. En esa última columna, sustituye pendiente por por preparar. Los demás estados deben quedar iguales y el resultado debe ordenarse por id.
Criterio de éxito: los pedidos 102 y 105 muestran por preparar; enviado y cancelado permanecen sin cambios.
REPLACE sobre la columna estado.'pendiente' y el sustituto es 'por preparar'.BETWEEN 101 AND 106 y ordena por id.Solución razonada
SELECT id, estado,
REPLACE(estado, 'pendiente', 'por preparar') AS estado_visible
FROM pedidos
WHERE id BETWEEN 101 AND 106
ORDER BY id;| id | estado | estado_visible |
|---|---|---|
| 101 | enviado | enviado |
| 102 | pendiente | por preparar |
| 103 | cancelado | cancelado |
| 104 | enviado | enviado |
| 105 | pendiente | por preparar |
| 106 | enviado | enviado |
REPLACE solo cambia las filas donde encuentra el fragmento. Cuando pendiente no aparece, devuelve el estado original; por eso esta práctica también comprueba el comportamiento sin coincidencias.
Diferencias entre motores
La función de texto REPLACE(texto, búsqueda, sustituto) está disponible en SQLite, PostgreSQL y MySQL. Las reglas de comparación, el tipo devuelto y el comportamiento de otras sentencias llamadas REPLACE pueden variar. No confundas la función con una operación de escritura específica del motor.
Qué debes recordar
- Sustituye todas las coincidencias del fragmento buscado.
- Si no hay coincidencias, devuelve el texto original.
- En un
SELECT, no modifica la tabla. - La función de texto no es lo mismo que una sentencia de sustitución de filas.
Conceptos relacionados
Fuentes técnicas consultadas
Se utilizaron para comprobar la firma y diferenciar la función de otras operaciones.