sql >> Databáze >  >> RDS >> Oracle

Funkce REPLACE() v Oracle

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:

  1. chyba běhu:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

  2. Oznámení ClusterControl 1.7.5:Pokročilá údržba a podpora clusteru pro PostgreSQL 12 a MongoDB 4.2

  3. Oznamujeme repmgr 2.0RC2

  4. Najděte vzdálenost mezi dvěma body pomocí zeměpisné šířky a délky v mysql