Dans Oracle, le REPLACE()
permet de remplacer une partie d'une chaîne par une autre chaîne.
La fonction accepte trois arguments :la chaîne, la sous-chaîne à remplacer et la chaîne de remplacement (avec laquelle remplacer la sous-chaîne).
Vous pouvez omettre la chaîne de remplacement, auquel cas la fonction supprimera toutes les instances de la sous-chaîne.
Syntaxe
La syntaxe ressemble à ceci :
REPLACE(char, search_string
[, replacement_string ]
)
Où char
est la chaîne, search_string
est la sous-chaîne à remplacer, et replacement_string
est la chaîne par laquelle remplacer cette sous-chaîne.
Exemple
Voici un exemple de base :
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Résultat :
Barrier Reef
Dans ce cas, nous avons remplacé la sous-chaîne Island
avec Reef
.
Plusieurs correspondances
Si la chaîne à remplacer apparaît plusieurs fois dans la chaîne, toutes les occurrences sont remplacées :
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Résultat :
Black cats and white cats
Aucune correspondance
Si la sous-chaîne n'apparaît pas dans la chaîne, REPLACE()
renvoie la chaîne inchangée :
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Résultat :
Barrier Island
Supprimer une sous-chaîne
L'omission du troisième argument supprime la sous-chaîne de la chaîne :
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Résultat :
Black and white
Si vous regardez attentivement, vous remarquerez que les espaces restent, car nous n'avons spécifié aucun espace dans la sous-chaîne.
Le voici à nouveau avec l'espace inclus :
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Résultat :
Black and white
Sensibilité à la casse
Le REPLACE()
la fonction effectue une correspondance sensible à la casse :
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Résultat :
Barrier Island
Dans cet exemple, la casse ne correspondait pas et la chaîne d'origine a donc été retournée inchangée.
Chaînes vides
Voici ce qui se passe lorsqu'une chaîne vide est passée pour chaque argument donné :
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Résultat :
1 2 3 ____ ____________ _________ Black dog Black
Donc dans ce cas :
- Passer une chaîne vide pour la chaîne initiale renvoie une chaîne vide.
- Passer une chaîne vide pour le deuxième argument renvoie la chaîne d'origine.
- Passer une chaîne vide pour le troisième argument supprime la chaîne à remplacer de la chaîne.
Caractère espace
Une chaîne vide n'est pas la même chose que le caractère espace.
Voici ce qui se passe lorsque nous changeons la chaîne vide en espace :
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Résultat :
1 2 3 ____ ______________ __________ Blackcatdog Black
Par conséquent, si la chaîne n'est rien d'autre qu'un espace, nous pouvons la remplacer par une autre chaîne :
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Résultat :
cat
Arguments nuls
Passer null
pour chaque argument fonctionne comme la transmission d'une chaîne vide :
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;
Résultat :
1 2 3 _______ ____________ _________ null Black dog Black
Par défaut, SQLcl et SQL*Plus renvoient un espace vide chaque fois que null
se produit à la suite d'un SQL SELECT
déclaration.
Cependant, vous pouvez utiliser SET NULL
pour spécifier une autre chaîne à renvoyer. Ici, j'ai précisé que la chaîne null
doit être retourné.
Arguments manquants
Appel de REPLACE()
sans passer d'arguments entraîne une erreur :
SELECT REPLACE()
FROM DUAL;
Résultat :
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:
Trop d'arguments
Et passer trop d'arguments renvoie une erreur :
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Résultat :
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: