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: