W Oracle SUBSTR()
funkcja zwraca podciąg z podanego ciągu.
SUBSTR()
wymaga co najmniej dwóch argumentów; ciąg i pozycję, z której należy wyodrębnić podciąg. Akceptuje również opcjonalny trzeci argument, który pozwala określić, jak długi powinien być podciąg.
SUBSTR()
można również traktować jako grupę funkcji. Istnieje pięć oddzielnych funkcji; SUBSTR()
, SUBSTRB()
, SUBSTRC()
, SUBSTR2()
i SUBSTR4()
. Każda funkcja oblicza długość w inny sposób.
Składnia
Składnia wygląda tak:
{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])
Gdzie char
jest ciągiem, position
jest pozycją początkową podciągu, a substring_length
to długość znaków do wyodrębnienia.
Funkcje obliczają długości w następujący sposób:
Funkcja | Oblicza długość za pomocą… |
---|---|
SUBSTR() | Znaki zdefiniowane przez zestaw znaków wejściowych |
SUBSTRB() | Bajtów |
SUBSTRC() | Kompletne znaki Unicode |
SUBSTR2() | Punkty kodowe UCS2 |
SUBSTR4() | Punkty kodowe UCS4 |
Przykład
Oto podstawowy przykład:
SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;
Wynik:
fat cat
W porównaniu z SUBSTRB()
Ten przykład pokazuje, jak wyniki mogą się różnić w zależności od konkretnej funkcji, której używasz, oraz od użytego zestawu znaków.
W tym przypadku porównujemy SUBSTR()
z 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;
Wynik:
SUBSTR SUBSTRB ________________ _________________ k yağlı pişik ük yağlı pişik
Widzimy, że te dwie funkcje zwróciły dwa różne wyniki. Dzieje się tak, ponieważ niektóre znaki w tym ciągu używają dwóch bajtów.
SUBSTR()
funkcja zwraca długość w cznakach, zgodnie z definicją zestawu znaków wejściowych, podczas gdy SUBSTRB()
funkcja zwraca długość w bajtach .
Jeśli wrócimy do oryginalnego ciągu, wyniki obu funkcji są takie same:
SELECT
SUBSTR('Big fat cat', 5) AS SUBSTR,
SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;
Wynik:
SUBSTR SUBSTRB __________ __________ fat cat fat cat
Dzieje się tak, ponieważ ten ciąg używa tylko jednego bajtu na znak, więc długość w bajtach jest taka sama jak liczba znaków.
Długość podciągu
Oto przykład określający długość podciągu do wyodrębnienia:
SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;
Wynik:
fat
A oto porównanie między SUBSTR()
i SUBSTRB()
przy określaniu długości znaków wielobajtowych:
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;
Wynik:
SUBSTR SUBSTRB ____________ __________ k yağlı p ük yağl
Pozycja zerowa
Jednym z dziwactw tej funkcji jest to, że przekazywanie pozycji 0
daje taki sam wynik jak przekazanie 1
:
SELECT
SUBSTR('Big fat cat', 0, 3) AS "0",
SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;
Wynik:
0 1 ______ ______ Big Big
Pozycja ujemna
Określenie ujemnej wartości pozycji powoduje, że pozycja początkowa jest liczona wstecz od końca ciągu:
SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;
Wynik:
cat
Każda określona długość jest liczona od tej pozycji do przodu:
SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;
Wynik:
fat
Argumenty zerowe
Jeśli którykolwiek (lub wszystkie) argumenty są null
, wynik to 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;
Wynik:
R1 R2 R3 R4 _______ _______ _______ _______ null null null null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie SUBSTR()
bez przekazania żadnych argumentów powoduje błąd:
SELECT SUBSTR()
FROM DUAL;
Wynik:
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:
Przekazywanie zbyt wielu argumentów również skutkuje błędem:
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;
Wynik:
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: