I Oracle, SUBSTR()
funktion returnerar en delsträng från en given sträng.
SUBSTR()
kräver minst två argument; strängen och den position som understrängen ska extraheras från. Den accepterar också ett valfritt tredje argument som låter dig specificera hur lång delsträngen ska vara.
SUBSTR()
kan också ses som en grupp av funktioner. Det finns fem separata funktioner; SUBSTR()
, SUBSTRB()
, SUBSTRC()
, SUBSTR2()
, och SUBSTR4()
. Varje funktion beräknar längden på olika sätt.
Syntax
Syntaxen ser ut så här:
{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])
Där char
är strängen, position
är startpositionen för delsträngen och substring_length
är längden på tecken som ska extraheras.
Funktionerna beräknar längder enligt följande:
Funktion | Beräknar längd med... |
---|---|
SUBSTR() | Tecken som definieras av den inmatade teckenuppsättningen |
SUBSTRB() | Byte |
SUBSTRC() | Unicode kompletta tecken |
SUBSTR2() | UCS2-kodpunkter |
SUBSTR4() | UCS4-kodpunkter |
Exempel
Här är ett grundläggande exempel:
SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;
Resultat:
fat cat
Jämfört med SUBSTRB()
Det här exemplet visar hur resultaten kan skilja sig, beroende på vilken specifik funktion du använder och vilken teckenuppsättning som är involverad.
I det här fallet jämför 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 att de två funktionerna gav två olika resultat. Detta beror på att vissa tecken i denna sträng använder två byte.
SUBSTR()
Funktionen returnerar längden i ctecken som definieras av den inmatade teckenuppsättningen, medan SUBSTRB()
funktion returnerar längden i byte .
Om vi återgår till den ursprungliga strängen blir resultaten desamma mellan de två funktionerna:
SELECT
SUBSTR('Big fat cat', 5) AS SUBSTR,
SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;
Resultat:
SUBSTR SUBSTRB __________ __________ fat cat fat cat
Det beror på att den här strängen bara använder en byte per tecken, så längden i byte är densamma som antalet tecken.
Längd på delsträng
Här är ett exempel som anger längden på delsträngen som ska extraheras:
SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;
Resultat:
fat
Och här är en jämförelse mellan SUBSTR()
och SUBSTRB()
när du anger längden på multi-byte-tecken:
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
Nollposition
En egenhet med den här funktionen är att man skickar en position på 0
ger samma resultat som att skicka 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
Att ange ett negativt värde för positionen gör att startpositionen räknas bakåt från slutet av strängen:
SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;
Resultat:
cat
Och vilken längd som helst som anges räknas från den positionen och framåt:
SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;
Resultat:
fat
Nollargument
Om något (eller alla) av argumenten är null
, resultatet är 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 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.
Inkorrekt antal argument
Anropar SUBSTR()
utan att skicka några argument resulterar i ett fel:
SELECT SUBSTR()
FROM DUAL;
Resultat:
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:
Och att skicka för många argument resulterar också i ett fel:
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;
Resultat:
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: