Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função REPLACE() no Oracle


No Oracle, o REPLACE() A função permite que você substitua uma parte de uma string por outra string.

A função aceita três argumentos:a string, a substring a ser substituída e a string de substituição (para substituir a substring).

Você pode omitir a string de substituição, nesse caso, a função removerá todas as instâncias da substring.

Sintaxe


A sintaxe fica assim:
REPLACE(char, search_string
        [, replacement_string ]
       )

Onde char é a string, search_string é a substring a ser substituída e replacement_string é a string pela qual substituir essa substring.

Exemplo


Segue um exemplo básico:
SELECT 
    REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;

Resultado:
Barrier Reef

Neste caso, substituímos a substring Island com Reef .

Várias correspondências


Se a string a ser substituída ocorrer várias vezes dentro da string, todas as ocorrências serão substituídas:
SELECT 
    REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;

Resultado:
Black cats and white cats

Sem correspondência


Se a substring não ocorrer na string, REPLACE() retorna a string inalterada:
SELECT 
    REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;

Resultado:
Barrier Island

Remover uma substring


Omitir o terceiro argumento remove a substring da string:
SELECT 
    REPLACE('Black dogs and white dogs', 'dogs')
FROM DUAL;

Resultado:
Black  and white 

Se você observar atentamente, notará que os espaços ainda permanecem, pois não especificamos nenhum espaço na substring.

Aqui está novamente com o espaço incluído:
SELECT 
    REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;

Resultado:
Black and white

Sensibilidade de maiúsculas e minúsculas


O REPLACE() função executa uma correspondência com distinção entre maiúsculas e minúsculas:
SELECT 
    REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;

Resultado:
Barrier Island

Neste exemplo, o caso não correspondeu e, portanto, a string original foi retornada inalterada.

Strings vazias


Aqui está o que acontece quando uma string vazia é passada 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    

Então neste caso:
  • Passar uma string vazia para a string inicial retorna uma string vazia.
  • Passar uma string vazia para o segundo argumento retorna a string original.
  • Passar uma string vazia para o terceiro argumento remove a string a ser substituída da string.

Caráter Espacial


Uma string vazia não é o mesmo que o caractere de espaço.

Aqui está o que acontece quando alteramos a string vazia para um espaço:
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     

Portanto, se a string não for nada além de um espaço, podemos substituí-la por outra string:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;

Resultado:
cat

Argumentos nulos


Passando null para cada argumento funciona como passar uma string vazia:
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    

Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que null ocorre como resultado de um SQL SELECT demonstração.

No entanto, você pode usar SET NULL para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null deve ser devolvido.

Argumentos ausentes


Chamando REPLACE() sem passar nenhum argumento resulta em um erro:
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:

Muitos argumentos


E passar muitos argumentos retorna um erro:
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: