Oracle
 sql >> Base de données >  >> RDS >> Oracle

Fonction REPLACE() dans Oracle

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 ]
       )

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: