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

REGEXP_INSTR() Fungsi di Oracle

Di Oracle, REGEXP_INSTR() fungsi mencari string untuk pola ekspresi reguler. Ini mengembalikan bilangan bulat yang menunjukkan posisi awal atau akhir dari substring yang cocok (mana pun yang Anda tentukan).

Ini memperluas fungsionalitas INSTR() fungsi dengan memungkinkan kita untuk menggunakan pola ekspresi reguler.

Sintaks

Sintaksnya seperti ini:

REGEXP_INSTR ( source_char, pattern
               [, position
                  [, occurrence
                     [, return_opt
                        [, match_param
                           [, subexpr ]
                        ]
                     ]
                  ]
               ]
             )

Dimana:

  • source_char adalah ekspresi karakter yang berfungsi sebagai nilai pencarian.
  • pattern adalah ekspresi reguler.
  • position adalah bilangan bulat positif yang menentukan tempat untuk memulai pencarian. Standarnya adalah 1 , artinya, mulailah pencarian pada karakter pertama.
  • occurrence adalah bilangan bulat positif yang menentukan kejadian mana yang akan dicari. Standarnya adalah 1 , yang berarti mencari kemunculan pertama.
  • return_opt menentukan apakah Oracle harus mengembalikan posisi awal atau akhir dari substring yang cocok. Gunakan 0 untuk permulaan, dan 1 untuk akhir. Nilai defaultnya adalah 0 .
  • match_param memungkinkan Anda mengubah perilaku pencocokan default dari fungsi tersebut. Misalnya, ini memungkinkan Anda untuk menentukan sensitivitas huruf besar-kecil, bagaimana beberapa baris dan spasi ditangani, dll. Argumen ini bekerja sama seperti ketika digunakan dengan REGEXP_COUNT() fungsi. Lihat dokumentasi Oracle untuk fungsi tersebut untuk informasi lebih lanjut.
  • Untuk pattern dengan subekspresi, subexpr adalah bilangan bulat nonnegatif dari 0 hingga 9 yang menunjukkan subekspresi mana dalam pattern akan dikembalikan oleh fungsi. Argumen ini bekerja sama seperti ketika digunakan dengan REGEXP_INSTR() fungsi. Lihat dokumentasi Oracle untuk informasi lebih lanjut tentang fungsi tersebut.

Contoh

Berikut adalah contoh dasar penggunaan REGEXP_INSTR() di Oracle:

SELECT 
    REGEXP_INSTR('My dogs are fluffy', 'd.g')
FROM DUAL;

Hasil:

4

Dalam hal ini ada kecocokan, dan posisi awal substring dikembalikan.

Ekspresi reguler bisa sangat kuat, dan contoh ini menggunakan contoh yang sangat sederhana. Untuk menggunakan REGEXP_INSTR() secara efektif, Anda harus mengetahui pola yang benar untuk digunakan untuk hasil yang diinginkan.

Tidak Cocok

Berikut ini contoh di mana tidak ada kecocokan:

SELECT REGEXP_INSTR('My dogs like dregs', 't.g')
FROM DUAL;

Hasil:

0

Tidak ada yang cocok, jadi 0 dikembalikan.

Beberapa Kecocokan

Berikut ini contoh dengan beberapa kecocokan:

SELECT 
    REGEXP_INSTR('My dogs have dags', 'd.g')
FROM DUAL;

Hasil:

4

Itu mengembalikan posisi kemunculan pertama.

Namun, Anda dapat menentukan kemunculan mana yang akan diganti:

SELECT 
REGEXP_INSTR('My dogs have dags', 'd.g', 1, 2)
FROM DUAL;

Hasil:

14

Perhatikan bahwa saya menambahkan dua argumen di sini; 1 dan 2 . 1 menentukan keberadaan dalam string untuk memulai pencarian (dalam hal ini, pada karakter pertama). 2 adalah apa yang menentukan kejadian mana yang harus dicari. Dalam hal ini, kemunculan kedua dicari.

Inilah yang terjadi jika saya memulai pencarian setelah kemunculan pertama:

SELECT 
REGEXP_INSTR('My dogs have dags', 'd.g', 8, 2)
FROM DUAL;

Hasil:

0

Dalam hal ini tidak ada kecocokan, karena hanya ada satu kejadian lagi setelah posisi awal.

Jika saya mengubah argumen terakhir menjadi 1 , maka kita mendapatkan kecocokan (karena ini adalah kemunculan pertama setelah posisi awal yang ditentukan):

SELECT 
REGEXP_INSTR('My dogs have dags', 'd.g', 8, 1)
FROM DUAL;

Hasil:

14

Kembalikan Posisi Akhir

Anda dapat meneruskan argumen kelima dari 0 atau 1 untuk menentukan apakah fungsi harus mengembalikan posisi awal atau akhir substring.

Nilai defaultnya adalah 0 (untuk posisi awal). Inilah yang terjadi jika kita menentukan 1 :

SELECT 
    REGEXP_INSTR('My dogs are fluffy', 'd.g', 1, 1, 1)
FROM DUAL;

Hasil:

7

Untuk lebih jelasnya, ini dia lagi jika dibandingkan dengan 0 :

SELECT 
    REGEXP_INSTR('My dogs are fluffy', 'd.g', 1, 1, 0) AS "Start",
    REGEXP_INSTR('My dogs are fluffy', 'd.g', 1, 1, 1) AS "End"
FROM DUAL;

Hasil:

   Start    End 
________ ______ 
       4      7

Sensitivitas Huruf Besar

REGEXP_INSTR() function mengikuti aturan penentuan dan derivasi susunan Oracle, yang menentukan susunan yang akan digunakan saat mencocokkan string dengan pola.

Namun, Anda dapat secara eksplisit menentukan sensitivitas huruf besar-kecil dengan argumen keenam opsional. Saat Anda melakukannya, ini akan menggantikan sensitivitas huruf besar atau kecil atau sensitivitas aksen dari susunan yang ditentukan.

Anda dapat menentukan i untuk pencocokan case-insensitive dan c untuk pencocokan peka huruf besar/kecil.

Ini contohnya:

SELECT 
    REGEXP_INSTR('My Cats', 'c.t', 1, 1, 0) AS "Default",
    REGEXP_INSTR('My Cats', 'c.t', 1, 1, 0, 'i') AS "Case Insensitive",
    REGEXP_INSTR('My Cats', 'c.t', 1, 1, 0, 'c') AS "Case Sensitive"
FROM DUAL;

Hasil:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   4                 0

Susunan saya tampaknya peka terhadap huruf besar-kecil, berdasarkan hasil ini. Dua string lainnya dipaksa untuk pencocokan case-insensitive dan case-sensitive masing-masing.

Subekspresi

Berikut adalah contoh penggunaan argumen keenam untuk mengembalikan pola subekspresi tertentu:

SELECT REGEXP_INSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 0, 'i', 1
    )
FROM DUAL;

Hasil:

1

Dalam hal ini saya mengembalikan subekspresi pertama.

Inilah yang terjadi jika saya menentukan subekspresi ketiga:

SELECT REGEXP_INSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 0, 'i', 3
    )
FROM DUAL;

Hasil:

7

Argumen Null

Dengan pengecualian argumen ke-6, memberikan null untuk argumen menghasilkan null :

SET NULL 'null';
SELECT 
    REGEXP_INSTR(null, 'c.t', 1, 1, 0, 'i', 1) AS "1",
    REGEXP_INSTR('Cat', null, 1, 1, 0, 'i', 1) AS "2",
    REGEXP_INSTR('Cat', 'c.t', null, 1, 0, 'i', 1) AS "3",
    REGEXP_INSTR('Cat', 'c.t', 1, null, 0, 'i', 1) AS "4",
    REGEXP_INSTR('Cat', 'c.t', 1, 1, null, 'i', 1) AS "5",
    REGEXP_INSTR('Cat', 'c.t', 1, 1, 0, null, 1) AS "6",
    REGEXP_INSTR('Cat', 'c.t', 1, 1, 0, 'i', null) AS "7"
FROM DUAL;

Hasil:

      1       2       3       4       5    6       7 
_______ _______ _______ _______ _______ ____ _______ 
   null    null    null    null    null    0    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

Tidak meneruskan argumen ke fungsi, atau terlalu sedikit, menghasilkan kesalahan:

SELECT REGEXP_INSTR()
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT REGEXP_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:

Hal yang sama berlaku ketika kita memberikan terlalu banyak argumen:

SELECT REGEXP_INSTR('Cat', 'c.t', 1, 1, 1, 'i', 1, 'oops')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT REGEXP_INSTR('Cat', 'c.t', 1, 1, 1, 'i', 1, 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

Informasi Lebih Lanjut

REGEXP_INSTR() fungsi (serta implementasi ekspresi reguler Oracle lainnya) sesuai dengan standar ekspresi reguler Antarmuka Sistem Operasi Portabel (POSIX) IEEE dan Pedoman Ekspresi Reguler Unicode dari Konsorsium Unicode.

Lihat dokumentasi Oracle untuk informasi lebih lanjut dan contoh REGEXP_INSTR() fungsi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memanggil fungsi Oracle dengan Kursor Ref sebagai parameter Keluar dari C #?

  2. Bagaimana saya bisa meneruskan parameter ke skrip t-sql?

  3. Cara Memeriksa Nilai Parameter NLS di Oracle Database

  4. Aksen dan susunan huruf besar/kecil di Oracle dengan LIKE

  5. File Respons Pembuatan Otomatis