V Oracle, REPLACE()
funkce umožňuje nahradit část řetězce jiným řetězcem.
Funkce přijímá tři argumenty:řetězec, podřetězec, který má být nahrazen, a náhradní řetězec (který má nahradit podřetězec).
Náhradní řetězec můžete vynechat, v takovém případě funkce odstraní všechny výskyty podřetězce.
Syntaxe
Syntaxe vypadá takto:
REPLACE(char, search_string
[, replacement_string ]
)
Kde char
je řetězec, search_string
je podřetězec, který se má nahradit, a replacement_string
je řetězec, kterým se má tento podřetězec nahradit.
Příklad
Zde je základní příklad:
SELECT
REPLACE('Barrier Island', 'Island', 'Reef')
FROM DUAL;
Výsledek:
Barrier Reef
V tomto případě jsme nahradili podřetězec Island
s Reef
.
Více shod
Pokud se řetězec, který má být nahrazen, vyskytuje v řetězci vícekrát, budou nahrazeny všechny výskyty:
SELECT
REPLACE('Black dogs and white dogs', 'dog', 'cat')
FROM DUAL;
Výsledek:
Black cats and white cats
Žádná shoda
Pokud se podřetězec v řetězci nevyskytuje, REPLACE()
vrátí řetězec beze změny:
SELECT
REPLACE('Barrier Island', 'to entry', 'Reef')
FROM DUAL;
Výsledek:
Barrier Island
Odstranění dílčího řetězce
Vynecháním třetího argumentu odstraníte podřetězec z řetězce:
SELECT
REPLACE('Black dogs and white dogs', 'dogs')
FROM DUAL;
Výsledek:
Black and white
Když se podíváte pozorně, všimnete si, že mezery stále zůstávají, protože jsme v podřetězci žádné mezery neurčili.
Tady je to znovu s vloženým prostorem:
SELECT
REPLACE('Black dogs and white dogs', ' dogs')
FROM DUAL;
Výsledek:
Black and white
Rozlišovat malá a velká písmena
REPLACE()
funkce provádí shodu rozlišující malá a velká písmena:
SELECT
REPLACE('Barrier Island', 'island', 'reef')
FROM DUAL;
Výsledek:
Barrier Island
V tomto příkladu se velká a malá písmena neshodovala, a tak byl původní řetězec vrácen beze změny.
Prázdné řetězce
Co se stane, když je pro každý daný argument předán prázdný řetězec:
SELECT
REPLACE('', 'dog', 'cat') AS "1",
REPLACE('Black dog', '', 'cat') AS "2",
REPLACE('Black dog', 'dog', '') AS "3"
FROM DUAL;
Výsledek:
1 2 3 ____ ____________ _________ Black dog Black
Takže v tomto případě:
- Předáním prázdného řetězce pro počáteční řetězec se vrátí prázdný řetězec.
- Předáním prázdného řetězce pro druhý argument se vrátí původní řetězec.
- Předáním prázdného řetězce pro třetí argument odstraníte z řetězce řetězec, který má být nahrazen.
Mezerní znak
Prázdný řetězec není totéž jako znak mezery.
Zde je to, co se stane, když změníme prázdný řetězec na mezeru:
SELECT
REPLACE(' ', 'dog', 'cat') AS "1",
REPLACE('Black dog', ' ', 'cat') AS "2",
REPLACE('Black dog', 'dog', ' ') AS "3"
FROM DUAL;
Výsledek:
1 2 3 ____ ______________ __________ Blackcatdog Black
Pokud tedy řetězec není nic jiného než mezera, můžeme jej nahradit jiným řetězcem:
SELECT REPLACE(' ', ' ', 'cat')
FROM DUAL;
Výsledek:
cat
Nulové argumenty
Předávání null
pro každý argument funguje jako předání prázdného řetězce:
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;
Výsledek:
1 2 3 _______ ____________ _________ null Black dog Black
Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null
dochází v důsledku SQL SELECT
prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null
by měl být vrácen.
Chybí argumenty
Volání REPLACE()
bez předání jakýchkoli argumentů dojde k chybě:
SELECT REPLACE()
FROM DUAL;
Výsledek:
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:
Příliš mnoho argumentů
A předání příliš mnoha argumentů vrátí chybu:
SELECT REPLACE('Cat', 'a', 'b', 'c')
FROM DUAL;
Výsledek:
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: