Adem KALIN – Yazılım Mühendisi

Oracle TRIM, LTRIM, RTRIM Fonksiyonları

TRIM_LTRIM_RTRIMBu yazımda Oracle üzerinde çalışırken string ifadeler için yoğun şekilde kullandığım TRIM fonksiyonu ve türevleri olan LTRIM, RTRIM fonksiyonları üzerine yoğunlaşacağım. Daha çok örnekler üzerinden kısa açıklamalar ile gitmeyi düşünüyorum.

TRIM

Bu fonksiyonları günlük olarak genellikle TRIM(string_ifade) şeklinde sadece başındaki ve sonundaki boşlukları temizlemek için kullansak da aslında istediğimiz herhangi bir karakter kümesini temizlemek için kullanma imkanımız var.

trim

TRIM, LTRIM ve RTRIM fonksiyonları, parametre olarak geçilen string ifadenin başında ve/veya sonunda, belirli karakterleri siler ve VARCHAR2 türünde dönerler. Silinmesini istediğiniz karakter(ler)i siz belirtmezseniz default olarak tek boşluk karakteri için çalışır ve boşluk karakterlerini silerler.

Trim fonksiyonuna parametre geçtiğiniz string ifadenin sağ tarafından mı yoksa sol tarafından mı karakterlerin temizlenmesi gerektiğini belirtebilirsiniz. Bunun için yukarıdaki imajda belirtilen LEADING, TRAILING yada BOTH anahtar kelimeleri ile birlikte FROM anahtar kelimesini eklemeniz gerekir.

LEADING ifadesi string ifadenin sol başından itibaren karakterlerin silineceğini, TRAILING ifadesi string ifadenin sağ başından (en sonundan itibaren) karakterlerin silineceğini, BOTH ise her iki taraftan da silineceğini belirtir. Bu 3 anahtar kelimeden hiçbirini kullanmazsanız, bu durumda default olarak BOTH gibi çalışacaktır. Örnekler üzerinden daha anlaşılır olacaktır.

SELECT '[' || TRIM(LEADING '*' FROM '***STARS***') || ']' "LEADING",
       '[' || TRIM(BOTH '*' FROM '***STARS***') || ']' "BOTH",
       '[' || TRIM(TRAILING '*' FROM '***STARS***') || ']' "TRAILING",
       '[' || TRIM(BOTH FROM '***     STARS ***') || ']' "BOTH_NULL",
       '[' || TRIM('*' FROM '***     STARS ***') || ']' "ONLY_FROM"
  FROM dual;
 
/*
LEADING     BOTH     TRAILING    BOTH_NULL      ONLY_FROM
----------  -------  ----------  -------------  ----------
[STARS***]  [STARS]  [***STARS]  [***STARS***]  [STARS]
*/

Örnekten de anlaşılacağı üzere, silinecek karakteri belirtmediğiniz durumda TEK BOŞLUK karakterleri silinmektedir.

Trim fonksiyonu, silinmesi istenen tek bir karakter için çalışmaktadır. Fakat bazı durumlarda birden fazla karakteri geçtiğ durumların silinmesi gerekebilmektedir. Bunun gibi, tek bir karakterin değil de bir karakter kümesinin söz konusu olduğu durumda ihtiyaca göre LTRIM veya RTRIM fonksiyonlarını kullanmanız gerekmektedir.

LTRIM

ltrimLTRIM fonksiyonunu, TRIM ‘in Leading keyword ‘ü ile birlikte kullanılmış şekli diye düşünebiliriz kısaca. Aralarındaki en önemli fark ise tek karakter yerine bir karakter seti kullanabiliyor olmanızdır. TRIM ‘de olduğu gibi, ikinci parametre olarak bir karakter seti vermezseniz, default olarak TEK BOŞLUK karakterleri silinmektedir.

Fonksiyonun çalışma mantığını şu şekilde özetleyebiliriz, parametre olarak geçilen string ifadede ilk karakterinden itibaren aramaya başlar ve ikinci parametrede geçilen karakter seti içerisindeki herhangi bir karakter var ise silerek bir sonraki karakteri kontrol etmeye geçer. İkinci parametredeki karakterlerin dışında bir karakter ile karşılaşana kadar bu işleme devam eder. Buyrun, örnekler üzerinden gidelim.

SELECT '[' || Ltrim('.?!!??.., ??NOKTALAMA', '?.!') || ']' "NOKTALAMA_1", 
       '[' || Ltrim('?!!?.., ??NOKTALAMA', '?!.') || ']' "NOKTALAMA_2", 
       '[' || Ltrim(' .?!!??.,. ??NOKTALAMA', '?.!') || ']' "NOKTALAMA_3", 
       '[' || Ltrim('       NOKTALAMA') || ']' "NOKTALAMA_4"
  FROM dual;
 
/*
NOKTALAMA_1      NOKTALAMA_2      NOKTALAMA_3               NOKTALAMA_4
---------------  ---------------  ------------------------  ------------
[, ??NOKTALAMA]  [, ??NOKTALAMA]  [ .?!!??.,. ??NOKTALAMA]  [NOKTALAMA]
*/

NOKTALAMA_1 ve NOKTALAMA_2 kolonlarındaki örneklerden de anlaşılacağı üzere, karakter seti içerisindeki karakterlerin sıralaması önemli değildir. Aynı şekilde, en baştan sona doğru bütün harfler karakter setindeki her bir karakter için ayrı ayrı kontrol edildiği için sol baştaki silinebilecek karakterlerin de sıralaması önemsizdir.

RTRIM
rtrim

RTRIM fonksiyonunu ise, TRIM ‘in Trailing keyword ‘ü ile birlikte kullanılmış şekli diye düşünebiliriz. Ve yine aralarındaki en önemli fark, tek karakter yerine bir karakter seti kullanabiliyor olmanız. İkinci parametre olarak bir karakter seti vermemeniz durumunda, default olarak TEK BOŞLUK karakterlerinin silinmesi burada da geçerlidir.

RTRIM fonksiyonun çalışma mantığını ise şu şekilde özetleyebiliriz, parametre olarak geçilen string ifadede en son karakterinden itibaren başa doğru (sağdan sola) aramaya başlar ve ikinci parametrede geçilen karakter seti içerisindeki herhangi bir karakter var ise silerek bir önceki karakteri kontrol etmeye geçer. İkinci parametredeki karakterlerin dışında bir karakter ile karşılaşana kadar bu işleme devam eder.

SELECT '[' || Rtrim('NOKTALAMA.! ,.?!!??..', '?.!') || ']' "NOKTALAMA_1", 
       '[' || Rtrim('NOKTALAMA.! ,.?!!??.!', '?!.') || ']' "NOKTALAMA_2", 
       '[' || Rtrim('NOKTALAMA.! ,.?!!??.! ', '?.!') || ']' "NOKTALAMA_3", 
       '[' || Rtrim('NOKTALAMA ') || ']' "NOKTALAMA_4"
  FROM dual;
 
/*
NOKTALAMA_1      NOKTALAMA_2      NOKTALAMA_3               NOKTALAMA_4
---------------  ---------------  ------------------------  ------------
[NOKTALAMA.! ,]  [NOKTALAMA.! ,]  [NOKTALAMA.! ,.?!!??.! ]  [NOKTALAMA]
*/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir