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

INSTR() Fungsi di Oracle

Di Oracle, INSTR() fungsi mencari substring dalam string yang diberikan, dan mengembalikan bilangan bulat yang menunjukkan posisi karakter pertama dari substring ini. Jika substring tidak ditemukan, fungsi mengembalikan 0 .

INSTR() membutuhkan setidaknya dua argumen; string, dan substring. Ia juga menerima argumen ketiga dan keempat opsional yang memungkinkan Anda menentukan posisi awal untuk mencari, dan kejadian mana yang harus dicari.

INSTR() juga dapat dianggap sebagai sekelompok fungsi. Ada lima fungsi terpisah; INSTR() , INSTRB() , INSTRC() , INSTR2() , dan INSTR4() . Setiap fungsi menghitung panjang dengan cara yang berbeda.

Sintaks

Sintaksnya seperti ini:

{ INSTR
| INSTRB
| INSTRC
| INSTR2
| INSTR4
}
(string , substring [, position [, occurrence ] ])

Dimana string adalah string yang akan dicari, substring adalah substring untuk menemukan, position adalah posisi awal substring, dan occurrence adalah kejadian mana yang harus ditemukan.

Fungsi menghitung panjang sebagai berikut:

Fungsi Menghitung panjang menggunakan…
INSTR() Karakter seperti yang didefinisikan oleh set karakter input, dengan karakter pertama dari string memiliki posisi 1.
INSTRB() Byte
INSTRC() Unicode karakter lengkap
INSTR2() poin kode UCS2
INSTR4() Poin kode UCS4

Contoh

Berikut ini contoh dasarnya:

SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;

Hasil:

5

Dibandingkan dengan INSTRB()

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 INSTR() dengan INSTRB() :

SELECT 
    INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR,
    INSTRB('Böyük yağlı pişik', 'yağlı') AS INSTRB
FROM DUAL;

Hasil:

   INSTR    INSTRB 
________ _________ 
       7         9

Kita dapat melihat bahwa kedua fungsi mengembalikan dua hasil yang berbeda. Ini karena beberapa karakter dalam string ini menggunakan dua byte.

INSTR() fungsi mengembalikan posisi seperti yang didefinisikan oleh set karakter input, sedangkan INSTRB() fungsi mengembalikan posisi berdasarkan byte .

Jika kita kembali ke string asli, hasilnya sama antara kedua fungsi:

SELECT 
    INSTR('Big fat cat', 'fat') AS INSTR,
    INSTRB('Big fat cat', 'fat') AS INSTRB
FROM DUAL;

Hasil:

   INSTR    INSTRB 
________ _________ 
       5         5 

Itu karena string ini hanya menggunakan satu byte per karakter, sehingga panjangnya dalam byte sama dengan jumlah karakter.

Posisi Awal

Berikut adalah contoh yang menentukan posisi untuk memulai pencarian:

SELECT INSTR('That fat cat', 'at', 8)
FROM DUAL;

Hasil:

11

Dalam hal ini, pencarian dimulai pada posisi 8, yaitu setelah dua kejadian pertama. Oleh karena itu, kami mendapatkan posisi pertandingan ketiga.

Tentukan Kejadian Yang Mana

Berikut adalah contoh untuk menentukan kemunculan yang akan ditemukan:

SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;

Hasil:

7

Dalam hal ini, kita mulai dari posisi 1, dan kemudian mencari kemunculan kedua dari posisi awal tersebut.

Ini dia lagi, tapi kali ini kita membandingkan tiga nilai berbeda untuk occurrence argumen:

SELECT 
    INSTR('That fat cat', 'at', 1, 1) AS "o1",
    INSTR('That fat cat', 'at', 1, 2) AS "o2",
    INSTR('That fat cat', 'at', 1, 3) AS "o3"
FROM DUAL;

Hasil:

   o1    o2    o3 
_____ _____ _____ 
    3     7    11

Tapi inilah yang terjadi jika kita meningkatkan position argumen:

SELECT 
    INSTR('That fat cat', 'at', 5, 1) AS "o1",
    INSTR('That fat cat', 'at', 5, 2) AS "o2",
    INSTR('That fat cat', 'at', 5, 3) AS "o3"
FROM DUAL;

Hasil:

   o1    o2    o3 
_____ _____ _____ 
    7    11     0 

Dalam hal ini kita tidak mendapatkan posisi kemunculan pertama, karena letaknya sebelum posisi awal kita. Kami juga mendapatkan 0 di kolom ketiga karena tidak ada kemunculan ketiga, berdasarkan posisi awal kita.

Posisi Negatif

Menentukan nilai negatif untuk posisi menyebabkan posisi awal dihitung mundur dari akhir string, dan Oracle mencari mundur dari posisi itu:

SELECT INSTR('That fat cat', 'at', -3)
FROM DUAL;

Hasil:

7

Dan setiap kejadian yang ditentukan dihitung mundur dari posisi itu:

SELECT INSTR('That fat cat', 'at', -3, 2)
FROM DUAL;

Hasil:

3

Argumen Null

Jika salah satu (atau semua) argumen adalah null , hasilnya null :

SET NULL 'null';
SELECT 
    INSTR(null, 'f', 1, 1) AS r1,
    INSTR('Coffee', null, 1, 1) AS r2,
    INSTR('Coffee', 'f', null, 1) AS r3,
    INSTR('Coffee', 'f', 1, 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 INSTR() tanpa memberikan argumen apa pun menghasilkan kesalahan:

SELECT INSTR()
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT INSTR()
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 INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 38
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. Oracle SQL Developer 21.4.2 dan SQLcl 21.4.1 sekarang tersedia

  2. Permintaan ditetapkan di Manajer Bersama

  3. Oracle 12.2 Sharding

  4. Oracle Data Mining (ODM) – Instalasi &Pengaturan

  5. Fungsi JSON_TABLE() di Oracle