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: