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

REGEXP_COUNT() Fungsi di Oracle

Di Oracle, REGEXP_COUNT() fungsi mengembalikan berapa kali suatu pola muncul dalam string sumber.

Sintaks

Sintaksnya seperti ini:

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

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.
  • 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.

Contoh

Berikut adalah contoh dasar penggunaan REGEXP_COUNT() di Oracle:

SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Hasil:

1

Dalam hal ini ada satu kecocokan.

Ekspresi reguler bisa sangat kuat, dan contoh ini menggunakan contoh yang sangat sederhana. Untuk menggunakan REGEXP_COUNT() secara efektif, Anda harus mengetahui pola yang benar untuk digunakan untuk hasil yang diinginkan. Contoh di halaman ini berfokus pada REGEXP_COUNT() fungsi itu sendiri, bukan pada ekspresi reguler.

Tidak Cocok

Berikut ini contoh di mana tidak ada kecocokan:

SELECT REGEXP_COUNT('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_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Hasil:

2

Dalam hal ini, ada dua kecocokan.

Posisi Awal

Anda dapat menentukan posisi awal:

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

Hasil:

1

Jadi di sini kita hanya mendapatkan satu pertandingan. Itu karena pencarian tidak dimulai sampai setelah kemunculan pertama (posisi 8).

Sensitivitas Huruf Besar

REGEXP_COUNT() function mengikuti aturan penentuan 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 keempat 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_COUNT('My Cats', 'c.t', 1) AS "Default",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;

Hasil:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Di sini, susunan saya peka huruf besar-kecil. Dua string lainnya dipaksa untuk pencocokan case-insensitive dan case-sensitive masing-masing.

Argumen Null

Dengan pengecualian argumen keempat, memberikan null untuk argumen menghasilkan null :

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

Hasil:

      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

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_COUNT()
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT()
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_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', '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_COUNT() 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_COUNT() 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. SQL IN Klausul 1000 batas item

  2. Masalah perbandingan string Oracle PL/SQL

  3. Oracle Set Operator

  4. Cara Mendapatkan Kencan Kemarin di Oracle

  5. Membangun Grafik Ketergantungan Tabel Dengan Query Rekursif