I Oracle er REPLACE()
funktionen giver dig mulighed for at erstatte en del af en streng med en anden streng.
Funktionen accepterer tre argumenter:strengen, understrengen, der skal erstattes, og erstatningsstrengen (til at erstatte understrengen med).
Du kan udelade erstatningsstrengen, i hvilket tilfælde funktionen vil fjerne alle forekomster af understrengen.
Syntaks
Syntaksen ser sådan ud:
REPLACE(char, search_string
[, replacement_string ]
)
Hvor char
er strengen, search_string
er understrengen, der skal erstattes, og replacement_string
er strengen, der skal erstatte den understreng med.
Eksempel
Her er et grundlæggende eksempel:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Resultat:
Barrier Reef
I dette tilfælde erstattede vi understrengen Island
med Reef
.
Flere match
Hvis strengen, der skal erstattes, forekommer flere gange i strengen, erstattes alle forekomster:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Resultat:
Black cats and white cats
Ingen match
Hvis understrengen ikke forekommer i strengen, REPLACE()
returnerer strengen uændret:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Resultat:
Barrier Island
Fjern en understreng
Udeladelse af det tredje argument fjerner understrengen fra strengen:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultat:
Black and white
Hvis du ser godt efter, vil du bemærke, at mellemrummene stadig er tilbage, da vi ikke har angivet nogen mellemrum i understrengen.
Her er den igen med pladsen inkluderet:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultat:
Black and white
Skrivar og bogstaver
REPLACE()
funktion udfører et match, der skelner mellem store og små bogstaver:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Resultat:
Barrier Island
I dette eksempel matchede sagen ikke, og derfor blev den oprindelige streng returneret uændret.
Tomme strenge
Her er, hvad der sker, når en tom streng sendes for hvert givet argument:
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Resultat:
1 2 3 ____ ____________ _________ Black dog Black
Så i dette tilfælde:
- Ved at sende en tom streng for den indledende streng returneres en tom streng.
- Hvis du sender en tom streng for det andet argument, returneres den oprindelige streng.
- Hvis du sender en tom streng for det tredje argument, fjernes den streng, der skal erstattes, fra strengen.
Mellemrumstegn
En tom streng er ikke det samme som mellemrumstegnet.
Her er, hvad der sker, når vi ændrer den tomme streng til et mellemrum:
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Resultat:
1 2 3 ____ ______________ __________ Blackcatdog Black
Derfor, hvis strengen ikke er andet end et mellemrum, kan vi erstatte det med en anden streng:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Resultat:
cat
Nul-argumenter
Sender null
for hvert argument fungerer som at sende en tom streng:
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;
Resultat:
1 2 3 _______ ____________ _________ null Black dog Black
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Manglende argumenter
Kalder REPLACE()
uden at sende nogen argumenter resulterer det i en fejl:
SELECT REPLACE()
FROM DUAL;
Resultat:
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:
For mange argumenter
Og at sende for mange argumenter returnerer en fejl:
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Resultat:
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: