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

REGEXP_SUBSTR() Fungsi di Oracle

Di Oracle, REGEXP_SUBSTR() fungsi mengembalikan substring dari string, berdasarkan pola ekspresi reguler.

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

Sintaks

Sintaksnya seperti ini:

REGEXP_SUBSTR ( source_char, pattern
                [, position
                   [, occurrence
                      [, 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 nonnegatif yang menentukan kejadian mana yang akan dicari. Standarnya adalah 1 , yang berarti mencari kemunculan pertama.
  • 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_SUBSTR() di Oracle:

SELECT 
    REGEXP_SUBSTR('Cats and dogs', 'd.g')
FROM DUAL;

Hasil:

dog

Dalam hal ini ada kecocokan, dan substring pertama (dan dalam kasus ini, hanya) yang cocok akan dikembalikan.

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

Tidak Cocok

Berikut ini contoh di mana tidak ada kecocokan:

SET NULL 'null';
SELECT REGEXP_SUBSTR('My dogs like dregs', 't.g')
FROM DUAL;

Hasil:

null

Tidak ada yang cocok, jadi null dikembalikan.

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.

Beberapa Kecocokan

Berikut ini contoh dengan beberapa kecocokan:

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

Hasil:

dog

Namun, Anda dapat menentukan kemunculan mana yang akan diganti jika diperlukan:

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

Hasil:

dag

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_SUBSTR('My dogs have dags', 'd.g', 8, 2)
FROM DUAL;

Hasil:

null

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_SUBSTR('My dogs have dags', 'd.g', 8, 1)
FROM DUAL;

Hasil:

dag

Sensitivitas Huruf Besar

REGEXP_SUBSTR() 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 kelima 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_SUBSTR('My Cats', 'c.t', 1, 1) AS "Default",
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'i') AS "Case Insensitive",
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'c') AS "Case Sensitive"
FROM DUAL;

Hasil:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
null       Cat                 null             

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_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 1
    )
FROM DUAL;

Hasil:

cat

Dalam hal ini saya mengembalikan subekspresi pertama.

Inilah yang terjadi jika saya menentukan subekspresi ketiga:

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

Hasil:

cow

Argumen Null

Jika ada argumen null , hasilnya null :

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

Hasil:

      1       2       3       4       5       6 
_______ _______ _______ _______ _______ _______ 
null    null    null    null    null    null   

Jumlah Argumen Salah

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

SELECT REGEXP_SUBSTR()
FROM DUAL;

Hasil:

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

Hal yang sama berlaku ketika kita memberikan terlalu banyak argumen:

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

Hasil:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR('Cat', 'c.t', 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_SUBSTR() 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_SUBSTR() 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 melakukan penyetelan sql di Oracle

  2. Bisakah terjadi deadlock dengan metode akses yang sama?

  3. Data Warehousing ETL Data Profiling dengan Oracle Warehouse Builder

  4. Bagaimana cara melewatkan parameter boolean ke prosedur Oracle C #

  5. SQL Dev 4.2 SQL Teratas