In Oracle, de REPLACE()
functie stelt u in staat om een deel van een tekenreeks te vervangen door een andere tekenreeks.
De functie accepteert drie argumenten:de tekenreeks, de subtekenreeks die moet worden vervangen en de vervangende tekenreeks (om de subtekenreeks door te vervangen).
U kunt de vervangende tekenreeks weglaten, in welk geval de functie alle instanties van de subtekenreeks verwijdert.
Syntaxis
De syntaxis gaat als volgt:
REPLACE(char, search_string
[, replacement_string ]
)
Waar char
is de string, search_string
is de substring die moet worden vervangen, en replacement_string
is de tekenreeks waarmee die subtekenreeks moet worden vervangen.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Resultaat:
Barrier Reef
In dit geval hebben we de substring Island
vervangen met Reef
.
Meerdere wedstrijden
Als de te vervangen tekenreeks meerdere keren voorkomt binnen de tekenreeks, worden alle exemplaren vervangen:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Resultaat:
Black cats and white cats
Geen overeenkomst
Als de substring niet voorkomt in de string, REPLACE()
geeft de string ongewijzigd terug:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Resultaat:
Barrier Island
Een subtekenreeks verwijderen
Als u het derde argument weglaat, wordt de subtekenreeks uit de tekenreeks verwijderd:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultaat:
Black and white
Als je goed kijkt, zie je dat de spaties nog steeds aanwezig zijn, omdat we geen spaties in de substring hebben gespecificeerd.
Hier is het weer met de ruimte inbegrepen:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultaat:
Black and white
Hoofdlettergevoeligheid
De REPLACE()
functie voert een hoofdlettergevoelige overeenkomst uit:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Resultaat:
Barrier Island
In dit voorbeeld kwam de case niet overeen, en dus werd de originele string ongewijzigd geretourneerd.
Lege snaren
Dit is wat er gebeurt als een lege string wordt doorgegeven voor elk gegeven argument:
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Resultaat:
1 2 3 ____ ____________ _________ Black dog Black
Dus in dit geval:
- Het doorgeven van een lege tekenreeks voor de eerste tekenreeks retourneert een lege tekenreeks.
- Het doorgeven van een lege string voor het tweede argument geeft de originele string terug.
- Als u een lege tekenreeks doorgeeft voor het derde argument, wordt de tekenreeks die moet worden vervangen uit de tekenreeks verwijderd.
Spatieteken
Een lege tekenreeks is niet hetzelfde als het spatieteken.
Dit is wat er gebeurt als we de lege tekenreeks in een spatie veranderen:
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Resultaat:
1 2 3 ____ ______________ __________ Blackcatdog Black
Daarom, als de string niets anders is dan een spatie, dan kunnen we die vervangen door een andere string:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Resultaat:
cat
Nullargumenten
Doorgeven van null
voor elk argument werkt als het doorgeven van een lege string:
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;
Resultaat:
1 2 3 _______ ____________ _________ null Black dog Black
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ontbrekende argumenten
REPLACE()
. aanroepen zonder het doorgeven van argumenten resulteert in een fout:
SELECT REPLACE()
FROM DUAL;
Resultaat:
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:
Te veel argumenten
En het doorgeven van te veel argumenten levert een fout op:
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Resultaat:
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: