sql >> Databasteknik >  >> RDS >> Oracle

REPLACE() Funktion i Oracle

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:

  1. Heroku och Rails:Gem Load Error med Postgres, men det är specificerat i GEMFILE

  2. SQLite JSON_QUOTE()

  3. MySQL UPPDATERING och SELECT i ett pass

  4. Hur returnerar jag slumptal som en kolumn i SQL Server 2005?