Di Oracle, SUBSTR()
fungsi mengembalikan substring dari string yang diberikan.
SUBSTR()
membutuhkan setidaknya dua argumen; string, dan posisi untuk mengekstrak substring dari. Ia juga menerima argumen ketiga opsional yang memungkinkan Anda menentukan berapa lama substring seharusnya.
SUBSTR()
juga dapat dianggap sebagai sekelompok fungsi. Ada lima fungsi terpisah; SUBSTR()
, SUBSTRB()
, SUBSTRC()
, SUBSTR2()
, dan SUBSTR4()
. Setiap fungsi menghitung panjang dengan cara yang berbeda.
Sintaks
Sintaksnya seperti ini:
{ SUBSTR
| SUBSTRB
| SUBSTRC
| SUBSTR2
| SUBSTR4
}
(char, position [, substring_length ])
Dimana char
adalah string, position
adalah posisi awal substring, dan substring_length
adalah panjang karakter yang akan diekstrak.
Fungsi menghitung panjang sebagai berikut:
Fungsi | Menghitung panjang menggunakan… |
---|---|
SUBSTR() | Karakter seperti yang didefinisikan oleh set karakter input |
SUBSTRB() | Byte |
SUBSTRC() | Unicode karakter lengkap |
SUBSTR2() | poin kode UCS2 |
SUBSTR4() | Poin kode UCS4 |
Contoh
Berikut ini contoh dasarnya:
SELECT SUBSTR('Big fat cat', 5)
FROM DUAL;
Hasil:
fat cat
Dibandingkan dengan SUBSTRB()
Contoh ini menunjukkan bagaimana hasilnya bisa berbeda, tergantung pada fungsi spesifik mana yang Anda gunakan, dan rangkaian karakter yang terlibat.
Dalam hal ini, kami membandingkan SUBSTR()
dengan 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;
Hasil:
SUBSTR SUBSTRB ________________ _________________ k yağlı pişik ük yağlı pişik
Kita dapat melihat bahwa kedua fungsi mengembalikan dua hasil yang berbeda. Ini karena beberapa karakter dalam string ini menggunakan dua byte.
SUBSTR()
fungsi mengembalikan panjang karakter cseperti yang didefinisikan oleh set karakter input, sedangkan SUBSTRB()
fungsi mengembalikan panjang dalam byte .
Jika kita kembali ke string asli, hasilnya sama antara kedua fungsi:
SELECT
SUBSTR('Big fat cat', 5) AS SUBSTR,
SUBSTRB('Big fat cat', 5) AS SUBSTRB
FROM DUAL;
Hasil:
SUBSTR SUBSTRB __________ __________ fat cat fat cat
Itu karena string ini hanya menggunakan satu byte per karakter, sehingga panjangnya dalam byte sama dengan jumlah karakter.
Panjang Substring
Berikut adalah contoh yang menentukan panjang substring yang akan diekstrak:
SELECT SUBSTR('Big fat cat', 5, 3)
FROM DUAL;
Hasil:
fat
Dan inilah perbandingan antara SUBSTR()
dan SUBSTRB()
saat menentukan panjang pada karakter multi-byte:
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;
Hasil:
SUBSTR SUBSTRB ____________ __________ k yağlı p ük yağl
Posisi Nol
Salah satu kekhasan dari fungsi ini adalah, melewati posisi 0
menghasilkan hasil yang sama dengan melewati 1
:
SELECT
SUBSTR('Big fat cat', 0, 3) AS "0",
SUBSTR('Big fat cat', 1, 3) AS "1"
FROM DUAL;
Hasil:
0 1 ______ ______ Big Big
Posisi Negatif
Menentukan nilai negatif untuk posisi menyebabkan posisi awal dihitung mundur dari akhir string:
SELECT SUBSTR('Big fat cat', -3)
FROM DUAL;
Hasil:
cat
Dan panjang apa pun yang ditentukan dihitung dari posisi itu ke depan:
SELECT SUBSTR('Big fat cat', -7, 3)
FROM DUAL;
Hasil:
fat
Argumen Null
Jika salah satu (atau semua) argumen adalah null
, hasilnya 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;
Hasil:
R1 R2 R3 R4 _______ _______ _______ _______ null null null null
Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null
terjadi sebagai akibat dari SQL SELECT
penyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null
harus dikembalikan.
Jumlah Argumen Salah
Memanggil SUBSTR()
tanpa meneruskan argumen apa pun menghasilkan kesalahan:
SELECT SUBSTR()
FROM DUAL;
Hasil:
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:
Dan meneruskan terlalu banyak argumen juga menghasilkan kesalahan:
SELECT SUBSTR('Big fat cat', 3, 2, 1)
FROM DUAL;
Hasil:
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: