sql >> Database >  >> RDS >> Oracle

SUBSTR() Functie in Oracle

In Oracle, de SUBSTR() functie retourneert een subtekenreeks van een gegeven tekenreeks.

SUBSTR() vereist ten minste twee argumenten; de tekenreeks en de positie waarvan de subtekenreeks moet worden geëxtraheerd. Het accepteert ook een optioneel derde argument waarmee je kunt specificeren hoe lang de substring moet zijn.

SUBSTR() kan ook worden gezien als een groep functies. Er zijn vijf afzonderlijke functies; SUBSTR() , SUBSTRB() , SUBSTRC() , SUBSTR2() , en SUBSTR4() . Elke functie berekent de lengte op een andere manier.

Syntaxis

De syntaxis gaat als volgt:

{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])

Waar char is de string, position is de startpositie van de substring, en substring_length is de lengte van de tekens die moeten worden geëxtraheerd.

De functies berekenen de lengtes als volgt:

Functie Berekent lengte met…
SUBSTR() Tekens zoals gedefinieerd door de invoertekenset
SUBSTRB() Bytes
SUBSTRC() Unicode volledige tekens
SUBSTR2() UCS2-codepunten
SUBSTR4() UCS4-codepunten

Voorbeeld

Hier is een eenvoudig voorbeeld:

SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;

Resultaat:

fat cat

Vergeleken met SUBSTRB()

Dit voorbeeld laat zien hoe de resultaten kunnen verschillen, afhankelijk van de specifieke functie die u gebruikt en de betrokken tekenset.

In dit geval vergelijken we SUBSTR() met SUBSTRB() :

SELECT 
    SUBSTR('Böyük yağlı pişik', 5) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5) AS SUBSTRB
FROM DUAL;

Resultaat:

          SUBSTR           SUBSTRB 
________________ _________________ 
k yağlı pişik    ük yağlı pişik   

We kunnen zien dat de twee functies twee verschillende resultaten hebben opgeleverd. Dit komt omdat sommige tekens in deze tekenreeks twee bytes gebruiken.

De SUBSTR() functie retourneert de lengte in ctekens zoals gedefinieerd door de invoertekenset, terwijl de SUBSTRB() functie retourneert de lengte in bytes .

Als we terugkeren naar de originele string, zijn de resultaten hetzelfde tussen de twee functies:

SELECT 
    SUBSTR('Big fat cat', 5) AS SUBSTR,
    SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;

Resultaat:

    SUBSTR    SUBSTRB 
__________ __________ 
fat cat    fat cat   

Dat komt omdat deze string slechts één byte per teken gebruikt, en dus is de lengte in bytes gelijk aan het aantal tekens.

Subtekenreekslengte

Hier is een voorbeeld dat de lengte specificeert van de substring die moet worden geëxtraheerd:

SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;

Resultaat:

fat

En hier is een vergelijking tussen SUBSTR() en SUBSTRB() bij het specificeren van de lengte van multi-byte tekens:

SELECT 
    SUBSTR('Böyük yağlı pişik', 5, 9) AS SUBSTR,
    SUBSTRB('Böyük yağlı pişik', 5, 9) AS SUBSTRB
FROM DUAL;

Resultaat:

      SUBSTR    SUBSTRB 
____________ __________ 
k yağlı p    ük yağl    

Nulpositie

Een eigenaardigheid van deze functie is dat het doorgeven van een positie van 0 geeft hetzelfde resultaat als het doorgeven van 1 :

SELECT 
    SUBSTR('Big fat cat', 0, 3) AS "0",
    SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;

Resultaat:

     0      1 
______ ______ 
Big    Big   

Negatieve positie

Door een negatieve waarde voor de positie op te geven, wordt de startpositie teruggeteld vanaf het einde van de tekenreeks:

SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;

Resultaat:

cat

En elke lengte die is opgegeven, wordt vanaf die positie vooruit geteld:

SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;

Resultaat:

fat

Nullargumenten

Als een (of alle) argumenten null . zijn , het resultaat is null :

SET NULL 'null';
SELECT 
    SUBSTR(null, 3, 3) AS r1,
    SUBSTR('Coffee', null, 3) AS r2,
    SUBSTR('Coffee', 3, null) AS r3,
    SUBSTR(null, null, null) AS r4
FROM DUAL;

Resultaat:

     R1      R2      R3      R4 
_______ _______ _______ _______ 
null    null    null    null   

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.

Onjuist aantal argumenten

SUBSTR() . aanroepen zonder het doorgeven van argumenten resulteert in een fout:

SELECT SUBSTR()
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT SUBSTR()
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:

En het doorgeven van te veel argumenten resulteert ook in een fout:

SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;

Resultaat:

Error starting at line : 1 in command -
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL
Error at Command Line : 1 Column : 36
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Hoe maak je een nieuwe database aan met de hstore-extensie al geïnstalleerd?

  2. Definieer een variabele binnen select en gebruik deze binnen dezelfde select

  3. Zoek naar "hele woord match" met SQL Server LIKE-patroon

  4. MySQL Tabellen maken met buitenlandse sleutels die errno geven:150