sql >> Databasteknik >  >> RDS >> Oracle

SUBSTR() Funktion i Oracle

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:

  1. Mekanism Följer av Oracle när vi tar hot backup

  2. PostgreSQL konverterade fel från tidsstämpel utan tidszon till tidsstämpel med tidszon

  3. PDO MySQL:Använd PDO::ATTR_EMULATE_PREPARES eller inte?

  4. Hur felsöker man ORA-01775:looping kedja av synonymer?