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: