sql >> Database >  >> RDS >> Oracle

REPLACE() Functie in Oracle

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:

  1. Bewerkte weergavequery wijzigen

  2. Wordt de methode onUpgrade ooit aangeroepen?

  3. Hoe het verschil in uren (decimaal) tussen twee datums in SQL Server te berekenen?

  4. Verzoek ingesteld in Concurrent Manager