I Oracle, REPLACE()
funktionen låter dig ersätta en del av en sträng med en annan sträng.
Funktionen accepterar tre argument:strängen, delsträngen som ska ersättas och ersättningssträngen (att ersätta delsträngen med).
Du kan utelämna ersättningssträngen, i så fall kommer funktionen att ta bort alla instanser av understrängen.
Syntax
Syntaxen ser ut så här:
REPLACE(char, search_string
[, replacement_string ]
)
Där char
är strängen, search_string
är delsträngen som ska ersättas och replacement_string
är strängen att ersätta den delsträngen med.
Exempel
Här är ett grundläggande exempel:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Resultat:
Barrier Reef
I det här fallet ersatte vi delsträngen Island
med Reef
.
Flera matchningar
Om strängen som ska ersättas förekommer flera gånger i strängen, ersätts alla förekomster:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Resultat:
Black cats and white cats
Ingen match
Om delsträngen inte förekommer i strängen, REPLACE()
returnerar strängen oförändrad:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Resultat:
Barrier Island
Ta bort en delsträng
Om det tredje argumentet utelämnas tas delsträngen bort från strängen:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultat:
Black and white
Om du tittar noga kommer du att märka att mellanslagen fortfarande finns kvar, eftersom vi inte angav några mellanslag i delsträngen.
Här är den igen med utrymmet inkluderat:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Resultat:
Black and white
Skaftkänslighet
REPLACE()
funktion utför en skiftlägeskänslig matchning:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Resultat:
Barrier Island
I det här exemplet stämde inte fallet, så den ursprungliga strängen returnerades oförändrad.
Tömma strängar
Så här händer när en tom sträng skickas för varje 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 det här fallet:
- Att skicka en tom sträng för den initiala strängen returnerar en tom sträng.
- Att skicka en tom sträng för det andra argumentet returnerar den ursprungliga strängen.
- Att skicka en tom sträng för det tredje argumentet tar bort strängen som ska ersättas från strängen.
Mellanslagstecken
En tom sträng är inte detsamma som mellanslagstecknet.
Så här händer när vi ändrar den tomma strängen till ett mellanslag:
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
Därför, om strängen inte är något annat än ett mellanslag, kan vi ersätta det med en annan sträng:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Resultat:
cat
Nollargument
Skickar null
för varje argument fungerar som att skicka en tom sträng:
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 returnerar SQLcl och SQL*Plus ett tomt utrymme när null
uppstår som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Argument saknas
Anropar REPLACE()
utan att skicka några argument resulterar i ett fel:
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:
För många argument
Och att skicka för många argument returnerar ett fel:
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: