sql >> Database teknologi >  >> RDS >> Oracle

SUBSTR() Funktion i Oracle

I Oracle er SUBSTR() funktion returnerer en understreng fra en given streng.

SUBSTR() kræver mindst to argumenter; strengen og den position, som understrengen skal udtrækkes fra. Den accepterer også et valgfrit tredje argument, der giver dig mulighed for at angive, hvor lang understrengen skal være.

SUBSTR() kan også opfattes som en gruppe af funktioner. Der er fem separate funktioner; SUBSTR() , SUBSTRB() , SUBSTRC() , SUBSTR2() , og SUBSTR4() . Hver funktion beregner længden på en anden måde.

Syntaks

Syntaksen ser sådan ud:

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

Hvor char er strengen, position er startpositionen for understrengen, og substring_length er længden af ​​tegn, der skal udtrækkes.

Funktionerne beregner længder som følger:

Funktion Beregner længde ved hjælp af...
SUBSTR() Tegn som defineret af inputtegnsættet
SUBSTRB() Bytes
SUBSTRC() Complete Unicode-tegn
SUBSTR2() UCS2-kodepunkter
SUBSTR4() UCS4-kodepunkter

Eksempel

Her er et grundlæggende eksempel:

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

Resultat:

fed kat

Sammenlignet med SUBSTRB()

Dette eksempel viser, hvordan resultaterne kan variere, afhængigt af hvilken specifik funktion du bruger, og det involverede tegnsæt.

I dette tilfælde sammenligner vi SUBSTR() med 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; 

Resultat:

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

Vi kan se, at de to funktioner gav to forskellige resultater. Dette skyldes, at nogle tegn i denne streng bruger to bytes.

SUBSTR() funktion returnerer længden i ckarakterer som defineret af inputtegnsættet, hvorimod SUBSTRB() funktion returnerer længden i bytes .

Hvis vi vender tilbage til den oprindelige streng, er resultaterne de samme mellem de to funktioner:

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

Resultat:

 SUBSTR SUBSTRB __________ __________ fed kat fed kat 

Det skyldes, at denne streng kun bruger én byte pr. tegn, og så længden i bytes er den samme som antallet af tegn.

Længde af understreng

Her er et eksempel, der angiver længden af ​​den understreng, der skal udtrækkes:

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

Resultat:

fedt

Og her er en sammenligning mellem SUBSTR() og SUBSTRB() når du angiver længden på multi-byte tegn:

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; 

Resultat:

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

Nulposition

Et særpræg ved denne funktion er, at man passerer en position på 0 giver det samme resultat som at sende 1 :

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

Resultat:

 0 1 ______ ______ Big Big 

Negativ position

Angivelse af en negativ værdi for positionen bevirker, at startpositionen tælles baglæns fra slutningen af ​​strengen:

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

Resultat:

kat

Og enhver længde, der er angivet, tælles fra den position og frem:

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

Resultat:

fedt

Nul-argumenter

Hvis nogen (eller alle) af argumenterne er null , resultatet er 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; 

Resultat:

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

Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når null opstår som et resultat af en SQL SELECT udmelding.

Du kan dog bruge SET NULL for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null skal returneres.

Forkert antal argumenter

Kalder SUBSTR() uden at sende nogen argumenter resulterer det i en fejl:

SELECT SUBSTR()
FROM DUAL; 

Resultat:

Fejl starter på linje :1 i kommando -SELECT SUBSTR()FROM DUALerror på kommandolinje :1 Kolonne :8Fejlrapport -SQL-fejl:ORA-00938:ikke nok argumenter til funktion00938. 00000 - "ikke nok argumenter for funktion"*Årsag:*Handling:

Og at sende for mange argumenter resulterer også i en fejl:

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

Resultat:

Fejl starter på linje:1 i kommando -SELECT SUBSTR('Big fat cat', 3, 2, 1)FROM DUALEfejl på kommandolinje:1 Kolonne:36Fejlrapport -SQL-fejl:ORA-00939:for mange argumenter for funktion00939. 00000 - "for mange argumenter for funktion"*Årsag:*Handling:

  1. Hvordan bruger man enums i Oracle?

  2. ASIN() Eksempler i SQL Server

  3. Timeout for OracleDataReader.Read-metoden

  4. Skrivning i ExcelSheet ved hjælp af UTL_FILE-pakken i Oracle