- Veriler üzerindeki hesaplamaları tanımlamak.
- Özel verileri düzenlemek.
- Satır grupları için çıktıları ustaca kullanmak.
- Tarihleri ve numaraları formatlamak.
- Sütün veri tiplerini çevirmek.
Temel olarak SQL function ları 2 ye ayrılır
- Single Row Function (Tek Satır Fonksiyonlar)
- Multiple Row Function (Grup Function) Çok Satır Fonksiyonları.
KARAKTER FONKSİYONLARI
ÖRNEK:
select first_name,
lower(first_name) "Küçük Harfli",
upper(first_name) "Büyük Harfli",
initcap(lower(first_name)) "Ilk Harfi Büyük"
from hr.employees;
ÖRNEK:
SELECT first_name, last_name,
CONCAT(first_name, last_name) ,
job_id, LENGTH (last_name), INSTR(last_name, 'a') "'a' nerede?",
LPAD(first_name,10,'*') SOLA_DOLDUR,
RPAD(first_name,10,'-') SAGA_DOLDUR,
REPLACE(first_name,'e','a') DEGISTIR,
TRIM(' HELLO WORLD ') TEMIZLE
FROM hr.employees WHERE SUBSTR(job_id, 4) = 'REP';
SAYI FONKSİYONLARI
ROUND : Yuvarlama yapar
TRUNC: Virgülden sonrasını keser
MOD: Mod alır
SIGN: Sayının işaretini belirler
FLOOR: Yuvarlama yapar
TARİH FONKSİYONLARI
Tabloya tarih sütununa sahip bir kayıt ekleneceği zaman, yüzyıl bilgisi SYSDATE işlevinden alınır. SYSDATE geçerli veritabanı sunucu tarih ve saatini döndüren bir tarih işlevdir.
select sysdate from dual;
ile veritabanında ki geçerli tarih ve saati alabiliriz
Tarih fonksiyonları Oracle’da aşağıdaki tabloda verildiği gibi işlem yapar. Tüm tarih fonksiyonları MONTHS_BETWEEN fonksiyonu dışında bir sayısal veri değeri döndüren bir DATE veri türü ile bir değer döndürür.
ÖRNEK:
select MONTHS_BETWEEN (TO_DATE ('01.08.2017', 'dd.mm.yyyy'), TO_DATE ('01.01.2016', 'dd.mm.yyyy') ) kac_ay,
sysdate su_an, add_months(sysdate,5) ay_ekle,
next_day(sysdate,'MONDAY') sonraki_ptesi,
last_day(sysdate) ayin_son_gunu,
round(sysdate-60,'MONTH') r1,
round(sysdate,'YEAR') r2,
trunc(sysdate ,'MONTH') t1,
trunc(sysdate ,'YEAR') t2
from dual;
TARİHLER İLE ARİTMETİK İŞLEMLER
DÖNÜŞTÜRME FONKSİYONLARI
Implicit dönüştürme fonksiyonları
-
VARCHAR2 OR CHAR ------>NUMBER
-
VARCHAR2 OR CHAR -------> DATE
-
NUMBER -----------------------> VARCHAR2
-
DATE ----------------------------->VARCHAR2
Explict Dönüştürme Fonksiyonları
TO_CHAR FONKSİYONU (TARİH)
Tarih ve zamanlar için :
-
Kullanımı : TO_CHAR(tarih,’format’)
- Büyük küçük harf ayırt eder ve tek tırnak içinde yazılmalıdır.
- Geçerli herhangi bir tarih formatı içermelidir.
- Tarih değerinden bir virgül ile ayrılır.
ÖRNEK :
select hire_date,
to_char(hire_date,'dd.mm.yyyy') Noktali,
to_char(hire_date, 'DD Month YYYY') "Ayri Ayri",
to_char(hire_date, 'Ddspth Month YYYY HH:MI:SS') "Ayrı Ayrı Tarih",
to_char(hire_date, 'YYYY.MM.DD HH24:MI:SS') "Benim Formatım"
from hr.employees;
TO_NUMBER VE TO_DATE FONKSİYONLARI
TO_NUMBER(char [, ‘format’]) Bir karakter dizisini belirtilen bir formatta sayıya çevirir.
TO_DATE(char [, ‘format’]) Bir karakter dizisini belirtilen bir formatta tarihe çevirir.
ÖRNEK:
select TO_NUMBER('1071'),
SYSDATE,
TO_DATE('13/06/2008','dd.mm.yyyy'),
TO_DATE('20180701', 'yyyymmdd'),
TO_DATE('071918', 'MMDDYY')
FROM dual;
İÇ-İÇE FONKSİYONLAR
- Fonksiyonlar iç içe çağırılabilirler.
- Aşağıdaki şekilde en içteki fonksiyon en önce çalışır.
- İçten dışa doğru sonuçlar aktarılır.
ÖRNEK: Personellerin adını, Soyadını ve Soyadının ilk 6 karakteri ile _FRK I birleştirip büyük harfe dönüşecek şekilde listeleyelim
SELECT first_name, last_name,UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 6), '_FRK')) FROM hr.employees;
NVL FONKSİYONU
- Null değerini gerçek değerlere dönüştürür.
- Tarih, karakter ve sayı tiplerinde kullanılabilir.
- Data tipleri uyumlu olmalıdır.
- NVL(expr1, expr2)
ÖRNEK: Personellerin aylık maaşlarını,prim oranlarını ve yıllık maaşlarını listeleyelim
SELECT last_name,
salary,
NVL(commission_pct,0) "null OLANI 0 YAP",
(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM hr.employees;
DECODE FONKSİYONU
- Parametre olarak verilen sütun değerini yorumlayarak yeni değerler üretilmesini sağlar.
- Farklı dillerdeki IF-THEN-ELSE yapısı gibi işlem görerek çözme işlemi yapar.
ÖRNEK : Personellerin içinde IT_PROG pozisyonunda olanlara %30, ST_CLERK pozisyonunda olanlara %20 ve SA_REP pozisyonunda olanlara %50 zam olacak şekilde bilgileri listeleyelim
SELECT last_name, job_id, salary,
DECODE(job_id, 'IT_PROG', 1.30*salary, 'ST_CLERK', 1.20*salary, 'SA_REP', 1.50*salary,
salary) "Yeni Zamlı Maas" FROM hr.employees order by 1
CASE İFADESİ
Birçok sütun değerine göre yorum yaparak yeni değerler elde edilmesini sağlar.
Syntax
CASE expr
WHEN comparison_expr1 THEN return_expr1
WHEN comparison_expr2 THEN return_expr2
ELSE else_expr
ÖRNEK: Personellerin içinde IT_PROG pozisyonunda olanlara %30, ST_CLERK pozisyonunda olanlara %20 ve SA_REP pozisyonunda olanlara %50 zam olacak şekilde bilgileri listeleyelim
select first_name,last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG' THEN 1.30*salary
when 'ST_CLERK' then 1.20*salary
when 'SA_REP' then 1.50*salary
else salary end "Yeni Zamlı MAASLAR"
from hr.employees
Telefon numara kayıtlarını düzenleyen sql case ifadesi
select case when TELNO like '0%' THEN REPLACE(REPLACE(replace(substr(TELNO,2,length(TELNO)),' ',''),'(',''),')','')
when TELNO like '9%' THEN REPLACE(REPLACE(replace(substr(TELNO,3,length(TELNO)),' ',''),'(',''),')','')
when TELNO like '+%' THEN REPLACE(REPLACE(replace(substr(TELNO,4,length(TELNO)),' ',''),'(',''),')','')
else REPLACE(REPLACE(replace(TELNO,' ',''),'(',''),'(','') end as telno from XTABLE
Bir yanıt yazın