Merhabalar,
Bu yazımızda, Oracle veritabanı üzerinde kullanılan Regular Expression (Kurallı İfade) fonksiyonlarını anlatmaya çalışacağız. Bu fonksiyonlara ait daha detaylı örnekleri 2.yazımızda bulabilirsiniz.
Regular Expression fonksiyonları, genel olarak, kullanıcının merak ettiği belirli bir davranışa (pattern) ait verileri görüntülemek için kullanılır.
Oracle Üzerinde Regular Expression Kullanım Amaçları
- Validasyon Amacı: Kullanıcının birden fazla senaryoyu kontrol etmesi gerekebilir ve bu kontrolleri bu fonksiyonlar aracılığı ile yapabilir.
- Metakarakter İfadeleri: Veride bulunan A-Z ve 0-9 arasındaki karakterler haricindeki diğer karakterler ile ilgili araştırma yapabilirsiniz.
Regular Expression fonksiyonları, kendi içinde aynı mantığa sahip olup, 5 farklı şekilde kullanımı bulunmaktadır.
1.) REGEXP_LIKE
Bu fonksiyonlardan ‘REGEXP_LIKE’ ile ‘LIKE’ formülü birbirine benzer fonksiyonlardır fakat ‘LIKE’ daha basit örnekler için kullanılmalıdır. Örneğin, ‘Employees’ tablosunda bulunan çalışanların isimlerinden ‘EN’ ile biten kişileri listelerken, ‘LIKE’ daha kolay ve hızlı bir çözüm sağlar. Temel yazım şekli;
SELECT (column_name) FROM TABLE_NAME
WHERE
REGEXP_LIKE (Source String, Pattern, match_parameter)
“Source String”, kullanıcının araştırmak istediği kolon veya dize,
“Pattern”, kullanıcının eşleştirmek istediği davranış, kalıp vb.
“Match_parameter”, eşleştirme değişkeni.
Örnek 1-) Last_Name değeri, büyük ‘A’ ile başlayan satırlar :
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE REGEXP_LIKE (LAST_NAME, ‘^A(*)’) ;
Ellen Abel
Sundar Ande
Mozhe Atkinson
David Austin
‘^‘ (Match Pattern) : Arama yaparken İlk Harfi(Begining of String) araştırmasını sağlar.
Örnek 2-) Last_Name değeri, (büyük/küçük) a harfi içeren satırlar :
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE REGEXP_LIKE(LAST_NAME, ‘a(*)’ , ‘i’) ;
Ellen Abel
Sundar Ande
Mozhe Atkinson
David Austin
‘i’ (Match Pattern) : Arama yaparken büyük/küçük harf ayırt etmeden(case-insensitive) araştırmasını sağlar.
Örnek 3-) Last_Name değeri, sonu n ile biten satırlar
SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE REGEXP_LIKE (last_name, ‘(*)n$’);
Mozhe Atkinson
David Austin
David Bernstein
John Chen
Lex De Haan
Louise Doran
2.) REGEXP_COUNT
Temel olarak, kullanıcının REGEXP_LIKE fonksiyonunda bulmaya çalıştığı kalıbın-davranışın sayısını belirlemek için kullanılır. Temel yazım şekli;
SELECT (column_name) FROM TABLE_NAME WHERE REGEXP_COUNT( string, pattern [, start_position [, match_parameter ] ] )
“String” CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB veri tipleri olabilir.
“Pattern”, kullanıcının eşleştirmek istediği davranış, kalıp vb.
“Start_position”, isteğe bağlıdır. Aramanın başlayacağı konumdur. Herhangi bir değer yazılmazsa, ilk konum olan varsayılan değer 1’dir.
“Match_parameter”, isteğe bağlıdır. Eşleşme davranışını değiştirmeye izin verir.
Örnek 1-)
Kullanıcı ‘Sarı-Mavi-Kırmızı-Turuncu-‘ satırındaki ‘-‘ karakterinin kaç sefer geçtiğini öğrenmek için;
SELECT REGEXP_COUNT (‘Sarı-Mavi-Kırmızı-Turuncu-‘, ‘-‘, ‘c’) FROM dual
Sonuç 4 olarak dönecektir.
Örnek 2-)
Kullanıcı mail adresleri bilgisinde ‘@’ karakterinin kaç defa geçtiğini öğrenmek için;
SELECT REGEXP_COUNT(‘ASaaaa@bidunyasi.com’, ‘@’) FROM dual;
Sonuç 1 olarak dönecektir.
3.) REGEXP_REPLACE
Bu fonksiyon, REPLACE ( ) fonksiyonunun gelişmiş hali olarak düşünülebilir. Belirli bir
“String”, CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB veri tipleri olabilir.
“Pattern”, kullanıcının eşleştirmek istediği davranış, kalıp vb.
“Replacement_string”, isteğe bağlıdır ve varsayılan değeri null olarak atanmıştır.
“Start_position”, isteğe bağlıdır. Aramanın başlayacağı konumdur. Herhangi bir değer yazılmazsa, ilk konum olan varsayılan değer 1 dir.
“nth_occurrence”, değiştirmenin hangi konumda yer alması gerektiğini gösteren pozitif olmayan bir tam sayıdır.
“Match_parameter”, isteğe bağlıdır. Eşleşme davranışını değiştirmeye izin verir.
Örnek 1-)
Bazı tablolarda farklı karakterler bulunabilir. Örneğin,
‘B*u- bir REGEXP_♫REPL=ACE fonk-siyon ornegid$ir.’ cümlesi için;
SELECT
REGEXP_REPLACE(‘B*u- İlk REGEXP_♫REPL=ACE Fonk-siyon Örneğid$ir.’,'[^a-z A-Z_ğüşöçİĞÜŞÖÇ]’)
FROM dual
Sonuç “Bu İlk REGEXP_REPLACE Fonksiyon Örneğidir.” olacaktır.
4.) REGEXP_SUBSTR
REGEXP_SUBSTR ( string, pattern
[, start_position
[, nth_appearance
[, match_parameter
[, sub_expression ] ] ] ] )
Örnek 1-): (Sol taraftaki) Başlangıçtaki boşlukları atlayıp, bir sonraki boşluk karakterine kadar olan karakter dizesi (ilk kelime)
SELECT REGEXP_SUBSTR (‘Bir sevdadır Ayancık… ‘, ‘(\S*)’)
FROM dual;
Sonuç: “Bir”
Örnek 2-) : 1. karakterden başlayarak String içerisinde 4. kelimeyi sonunda ki boşluk karakteri ile alan
SELECT REGEXP_SUBSTR (‘TechOnTheNet is a great resource’, ‘(\S*)(\s)’, 1, 4)
FROM DUAL;
Sonuç: “great “
Match_Parameters :
\s : Boşluk karakteri
\S : Boşluk olmayan karakter
Örnek 3-) : 1. karakterden başlayarak 2. bitiş iki sayıyı yazdırma
SELECT REGEXP_SUBSTR (‘5, 10 and 15 are numbers in this example’, ‘(\d)(\d)’, 1, 2)
FROM DUAL;
Sonuç: 15
Match_Parameters :
\d : Sayısal karakter
\D : Sayısal olmayan karakter
5.) REGEXP_INSTR
REGEXP_INSTR ( string, pattern
[, start_position
[, nth_appearance
[, return_option
[, match_parameter
[, sub_expression ] ] ] ] ] )
Örnek 1-) : Karşılaştığı ilk sayısal olmayan karakterin(harf ya da noktalama işareti gibi) kaçıncı karakter olduğunu yazdırmak için;
SELECT REGEXP_INSTR (’06ANKARA’, ‘(\D)’)
FROM DUAL;
Sonuç: 3
Bu örnekte ’06ANKARA’ yerine ’06’ yani sadece sayısal ifade kullanırsak
Örnek 2-) : 1. karakterden başlayarak ilk karşılaştığı ünlü harfin kaçıncı sırada olduğunu yazdırır.
SELECT REGEXP_INSTR (‘BiDunyasi’, ‘a|e|i|o|u’, 1, 1, 0, ‘i’)
FROM dual;
Sonuç: 2
Daha detaylı inceleme ve konuya devam etmek için ;
Geri bildirim: Regular Expression (REGEXP) Fonksiyonları – 2 | İş Zekası ve Veri Tabanı Yönetimi
Süper Örnek =))
SELECT REGEXP_SUBSTR (‘Bir sevdadır Ayancık… ‘, ‘(\S*)’)
FROM dual;
Sonuç: “Bir”