Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

SUBSTR() Fungsi di Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. perbedaan antara ON Clause dan menggunakan klausa di sql

  2. Kebijakan Patch

  3. Mengembalikan nilai kolom identitas setelah penyisipan di Oracle

  4. Mengekstrak jumlah total detik dari tipe data interval

  5. Oracle.ManagedDataAccess.EntityFramework - ORA-01918:pengguna 'dbo' tidak ada