Etiketler

, , , ,


PL-SQL (ORACLE) Fonksiyonları – SUBSTR | String içinden herhangi bir bölümü ayırmak

PL-SQL ile veritabanında tablodan çektiğiniz kayıtları düzenleyi son kullanıcıya göstermeniz gerekebileceği gibi kimi zamanda bicimlendirdiğimiz bu kayıtları sorgu içinde kullanmamız gerekebiliyor. Bu ihtiyaçlar çoğu zaman eksik tasarlanmış tablolardan kaynaklansada, maliyetten kaçmak adına kendi çözümlerimizi ve müşterilere olabildiğince çabuk ve ihtiyaçlarını karşılar olarak geri dönmemiz gerekebiliyor. Bu konular proje yönetimi altında müşteri ihtiyaçları karşılama ve yönetme adı altında daha geniş ve detaylı olarak ileride tekrar ele alınacaktır.

Eğer tablonuzda tarih bilgisi içermeyen bir alan üzerinden sıralama yapmanız gerekirse, resmi çözüm o tabloya bir tarih(yada yıl) alanı ekleyip, geçmiş kayıtları da bu ölçüde güncelledikten sonra tarihe göre “order by YIL” sorgusunu çalıştırmanız olacaktır. Fakat komplex ve uzun yıllardan beri kodlanan bir proje üzerinde çalışıyorsanız, çoğu zaman değiştireceğiniz çok ufak bir değişiklik bile hiç beklemediğiniz bir çok yerin “patlamasına” yol açabilmektedir. Bunun için bu kaydın başına yada sonuna ekleteceğiniz yıl bilgisini PL-SQL ile kolayca alabilir ve sorgunuzda kullanabilirsiniz.

Belkide en çok bu tarz işlemler için kullanılan bir PL-SQL fonksiyonundan, SUBSTR den bahsedeceğim bugün.

SUBSTR

substr

SUBSTR(varchar , number , number )
SUBSTR("ifade" , başlangıç indisi , alınacak karakter sayısı)
SUBSTR("ifade",-sondan alınacak karakter sayısı)
SUBSTR("ifade" , başlayacağı indis)
-- 'Başlangıç indisinden sonra belirttiğimiz değer kadar karakter verir
--SELECT SUBSTR('Mehmet ÖZAKAN',0,2) FROM DUAL; ==> Me
--SELECT SUBSTR('Mehmet ÖZAKAN',1,2) FROM DUAL; ==> Me
--SELECT SUBSTR('Mehmet ÖZAKAN',2,2) FROM DUAL; ==>eh
--SELECT SUBSTR('Mehmet ÖZAKAN',4,8) FROM DUAL; ==>met ÖZAK
-- 'Birinci Boşluk karakterinden önceki bölümü verir
--SELECT SUBSTR('Mehmet ÖZAKAN',0,INSTR('Mehmet ÖZAKAN',' ')-1) FROM DUAL; ==>Mehmet
-- 'Birinci Boşluk karakterinden sonraki bölümü verir
--SELECT SUBSTR('Mehmet ÖZAKAN',-(LENGTH('Mehmet ÖZAKAN!')-INSTR('Mehmet ÖZAKAN!',' ')-1)) FROM DUAL; ==>ÖZAKAN
--SELECT SUBSTR('Mehmet ÖZAKAN!',INSTR('Mehmet ÖZAKAN!',' ')+1,LENGTH('Mehmet ÖZAKAN!')-INSTR('Mehmet ÖZAKAN!',' ')+1) FROM DUAL; ==> ÖZAKAN!
-- 'Sondan belirttiğimiz karakter kadar verir (Örnekte son 4 karakter istenmiş)
--SELECT SUBSTR('Mehmet ÖZAKAN',LENGTH('Mehmet ÖZAKAN!')-4,4) FROM DUAL; ==>AKAN
--SELECT SUBSTR('Mehmet ÖZAKAN',-4) FROM DUAL; ==>AKAN

SUBSTR sayesinde herhangi bir alanın baştan, sondan veya ortadan istediğimiz karakterleri almamız mümkün.

Bu konu ile ilgili aşağıdaki yazıları okumanızı tavsiye ederim.

Bu kategori altındaki diğer yazılarımı okuman isterseniz aşağıdaki yazılara göz atabilirsiniz.