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

REGEXP_REPLACE() Fungsi di Oracle

Di Oracle, REGEXP_REPLACE() fungsi menggantikan kemunculan substring dalam string yang cocok dengan pola ekspresi reguler yang diberikan.

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

Sintaks

Sintaksnya seperti ini:

REGEXP_REPLACE ( source_char, pattern
                 [, replace_string
                    [, position
                       [, occurrence
                          [, match_param ]
                       ]
                    ]
                 ]
               )

Dimana:

  • source_char adalah ekspresi karakter yang berfungsi sebagai nilai pencarian.
  • pattern adalah ekspresi reguler.
  • replace_string adalah string pengganti.
  • 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 harus diganti. Standarnya adalah 0 , yang artinya ganti semua kemunculan.
  • 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 informasi lebih lanjut.

Contoh

Berikut adalah contoh dasar penggunaan REGEXP_REPLACE() di Oracle:

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

Hasil:

Cats and birds

Dalam hal ini ada kecocokan, dan substring diganti dengan string pengganti.

Ekspresi reguler bisa sangat kuat, dan contoh ini menggunakan contoh yang sangat sederhana. Untuk menggunakan REGEXP_REPLACE() 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_REPLACE('Cats and dogs', 't.g', 'bird');

Hasil:

+------------------------------------------------+
| REGEXP_REPLACE('Cats and dogs', 't.g', 'bird') |
+------------------------------------------------+
| Cats and dogs                                  |
+------------------------------------------------+

Tidak ada kecocokan, sehingga string asli dikembalikan tidak berubah.

Beberapa Kecocokan

Berikut ini contoh dengan beberapa kecocokan:

SELECT 
    REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird')
FROM DUAL;

Hasil:

My bird likes other birds

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

SELECT 
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 1, 2)
FROM DUAL;

Hasil:

My dog likes other birds

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 diganti. Dalam hal ini, kemunculan kedua diganti.

Inilah yang terjadi jika saya memulai pencarian setelah kemunculan pertama:

SELECT 
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 7, 2)
FROM DUAL;

Hasil:

My dog likes other dogs

Dalam hal ini string tidak diperbarui, karena hanya ada satu kemunculan lagi setelah posisi awal.

Jika saya mengubah argumen terakhir menjadi 1 , kemudian diperbarui seperti yang ditentukan (karena ini adalah kemunculan pertama setelah posisi awal yang ditentukan):

SELECT 
REGEXP_REPLACE('My dog likes other dogs', 'd.g', 'bird', 7, 1)
FROM DUAL;

Hasil:

My dog likes other birds

Dan jika Anda bertanya-tanya, 0 menentukan semua kejadian:

SELECT REGEXP_REPLACE(
    'My dog likes big dogs and small dogs', 
    'd.g', 
    'bird', 1, 0
    )
FROM DUAL;

Hasil:

My bird likes big birds and small birds

Tapi tetap menghormati setiap posisi awal yang telah ditentukan:

SELECT REGEXP_REPLACE(
    'My dog likes big dogs and small dogs', 
    'd.g', 
    'bird', 7, 0
    )
FROM DUAL;

Hasil:

My dog likes big birds and small birds

Sensitivitas Huruf Besar

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

Hasil:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
My Cats    My dogs             My Cats         

Tampaknya dari hasil ini bahwa susunan default saya peka terhadap huruf besar-kecil. Dua string lainnya dipaksa untuk pencocokan case-insensitive dan case-sensitive masing-masing.

Argumen Null

Melewati null menghasilkan null untuk sebagian besar argumen, kecuali argumen kedua dan keenam:

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

Hasil:

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

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

Hasil:

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

Sama halnya dengan memberikan terlalu banyak argumen:

SELECT REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, 'i', 'oops')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT REGEXP_REPLACE('Cat', 'c.t', 'dog', 1, 0, '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_REPLACE() 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_REPLACE() 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. Apa jejak klien minimum yang diperlukan untuk menghubungkan C# ke database Oracle?

  2. Bagaimana Anda bisa tahu jika suatu nilai bukan numerik di Oracle?

  3. Mengulangi nilai dalam kolom

  4. ADD_MONTHS() Fungsi di Oracle

  5. Gabung dalam vs Dimana