En Oracle, REPLACE()
La función le permite reemplazar una parte de una cadena con otra cadena.
La función acepta tres argumentos:la cadena, la subcadena a reemplazar y la cadena de reemplazo (para reemplazar la subcadena).
Puede omitir la cadena de reemplazo, en cuyo caso, la función eliminará todas las instancias de la subcadena.
Sintaxis
La sintaxis es así:
REPLACE(char, search_string
[, replacement_string ]
)
Donde char
es la cadena, search_string
es la subcadena a reemplazar, y replacement_string
es la cadena con la que reemplazar esa subcadena.
Ejemplo
He aquí un ejemplo básico:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Resultado:
Barrier Reef
En este caso reemplazamos la subcadena Island
con Reef
.
Coincidencias Múltiples
Si la cadena que se va a reemplazar aparece varias veces dentro de la cadena, se reemplazan todas las apariciones:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Resultado:
Black cats and white cats
Sin coincidencia
Si la subcadena no aparece en la cadena, REPLACE()
devuelve la cadena sin cambios:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Resultado:
Barrier Island
Eliminar una subcadena
Omitir el tercer argumento elimina la subcadena de la cadena:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultado:
Black and white
Si observa de cerca, notará que los espacios aún permanecen, ya que no especificamos ningún espacio en la subcadena.
Aquí está de nuevo con el espacio incluido:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultado:
Black and white
Sensibilidad de mayúsculas y minúsculas
El REPLACE()
la función realiza una coincidencia que distingue entre mayúsculas y minúsculas:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Resultado:
Barrier Island
En este ejemplo, el caso no coincidía, por lo que la cadena original se devolvió sin cambios.
Cadenas vacías
Esto es lo que sucede cuando se pasa una cadena vacía para cada argumento dado:
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Resultado:
1 2 3 ____ ____________ _________ Black dog Black
Así que en este caso:
- Pasar una cadena vacía como cadena inicial devuelve una cadena vacía.
- Pasar una cadena vacía para el segundo argumento devuelve la cadena original.
- Pasar una cadena vacía para el tercer argumento elimina la cadena que se reemplazará de la cadena.
Carácter espacial
Una cadena vacía no es lo mismo que el carácter de espacio.
Esto es lo que sucede cuando cambiamos la cadena vacía por un espacio:
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Resultado:
1 2 3 ____ ______________ __________ Blackcatdog Black
Por lo tanto, si la cadena no es más que un espacio, podemos reemplazarlo con otra cadena:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Resultado:
cat
Argumentos nulos
Pasando null
para cada argumento funciona como pasar una cadena vacía:
SET NULL 'null';
SELECT
REPLACE(null, 'dog', 'cat') AS "1",
REPLACE('Black dog', null, 'cat') AS "2",
REPLACE('Black dog', 'dog', null) AS "3"
FROM DUAL;
Resultado:
1 2 3 _______ ____________ _________ null Black dog Black
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null
debe ser devuelto.
Argumentos faltantes
Llamando a REPLACE()
sin pasar ningún argumento da como resultado un error:
SELECT REPLACE()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT REPLACE() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Demasiados Argumentos
Y pasar demasiados argumentos devuelve un error:
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT REPLACE('Cat', 'a', 'b', 'c') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: