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 adalah1
, 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.