sql >> Base de Datos >  >> RDS >> Oracle

Función REEMPLAZAR () en Oracle

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: