Oracle Database — SQL Temelleri 5 — Dönüşüm Fonksiyonları

Gökhan YAVAŞ
gokhanyavas
Published in
4 min readAug 10, 2016

Merhaba Arkadaşlar,

Bu yazıda SQL’de dönüşüm fonksiyonlarını ve koşullu ifadeleri inceleyeceğiz. Dönüşüm fonksiyonları TO_CHAR, TO_DATE olmak üzere 2 çeşittir.

Dönüşüm Fonksiyonları

TO_CHAR: Bu fonksiyon sayı (number) ve tarih (date) tipini karakter tipine çevirmede kullanılır.

Önceki yazımda anlatmış olduğum tarih fonksiyonlarını kullanarak bugünün tarihini alalım ve değişik formatlarda gösterelim :

select To_Char(sysdate,'D-DD-DDD-DY-DAY/MM-Mon-MONTH/W-WW/Q/YYYY/YY/SCC') as "Bugünün Tarihi" from dual;
oracle-sql-5-1

D: Haftanın kaçıncı günündeyiz.
DD: Ayın kaçıncı Günündeyiz.
DDD: Yılın Kaçıncı Günündeyiz.
DY ve Day kısa ve uzun olarak Günün adını belirtir.Burada küçük büyük harf önemlidir ona göre monitör edilir.
MM: Kaçıncı Aydayız.
Mon ve MONTH kısa ve uzun olarak Ayın adını belirtir.Yine Küçük ve büyük harf duyarlıdır.(MON yazsaydık OCT gelirdi,MONTH yazdığımızda OCTOBER geldiği gibi)
W: Ayın kaçıncı haftasındayız.
WW: Yılın Kaçıncı haftasındayız.
YYYY: Hangi Yılda olduğumuzu 4 hane olarak monitör eder.
YY: Hangi yılda olduğumuzu son 2 hane olarak monitör eder.
SCC: Kaçıncı yüzyılda olduğumuzu monitör eder.
RM: Roma rakamıyla ayı, Q yılın kaçıncı çeyreğinde olduğumuzu gösterir.

Şimdi TO_CHAR fonksiyonunu kullanarak number(sayı) tipini karaktere çevirelim. Örneğimi employees tablosunda salary kısmını kullanarak gerçekleştireceğim.

SELECT SALARY, TO_CHAR(SALARY, '$9999')"DOLARLI MAAŞ" FROM EMPLOYEES;
-- ÇIKTI: SALARY: 2600 DOLARLI MAAS:$2600 ŞEKLİNDE ÇIKAR FAKAT 4 KARAKTERDEN FAZLA OLAN
-- MAAŞ TUTARI ###### ŞEKLİNDE GÖZÜKÜR. BUNU ÖNLEMEK İÇİN AŞAĞIDAKİ SORGUYA BAKINIZ.
SELECT SALARY, TO_CHAR(SALARY, '$99,999.00')"DOLARLI MAAŞ" FROM EMPLOYEES;
-- $99,999.00 ŞEKLİNDE BELİRTTİK. TR DİL KULLANANLAR $99.999,00 YAZMALARI GEREKİR.
oracle-sql-5-2

TO_DATE: Bu fonksiyon karakter alanlarını tarih alanlarına çevirmemize yarar. Önceki anlatımlarımda where koşulu ile sorgularımızda veritabanında nasıl kayıtlıysa verilerimiz o şekilde çekebiliyorduk bu fonksiyonda biz nasıl istersek o şekilde getirebiliriz. Örneği inceleyin:

SELECT HIRE_DATE FROM EMPLOYEES
WHERE HIRE_DATE < TO_DATE('01-02-02','DD-MM-RR');
--ÇIKTI: 13-JAN-01

NVL Fonksiyonu: Bu fonksiyon ile null değerli olan verileri belirli bir değere dönüştürmede kullanılır.

SELECT FIRST_NAME, LAST_NAME,NVL(COMMISSION_PCT,0),(12*SALARY),
(12*SALARY)+(12*SALARY*NVL(COMMISSION_PCT,0))
"YILLIK TOPLAM KAZANC"
FROM EMPLOYEES;

örnekte komisyon değeri olmayan (null) verileri 0 değeri ile değiştirdik.

oracle-sql-5-3

NVL2 Fonksiyonu: Yine diğer fonksiyon gibi kullanıcıya anlamlı değer vermek için kullanılır. Örneği inceleyin.

--SYNTAX: NVL2( string1, value_if_not_null, value_if_null )
SELECT FIRST_NAME, LAST_NAME, NVL2(COMMISSION_PCT, 'KOMİSYON VAR', 'KOMİSYON YOK' ), COMMISSION_PCT FROM EMPLOYEES;
oracle-sql-5-4

NULLIF Fonksiyonu: İki parametre birbirine eşitse null eşit değilse ilk değeri döndürür. Örneği inceleyin.

select first_name,length(first_name) "UZUNLUK 1",
last_name,length(last_name) "UZUNLUK 2",
nullif(length(first_name),length(last_name))"SONUC"
from employees;
oracle-sql-5-5

COALESCE Fonksiyonu: Bildiğiniz üzere boş ile NULL aynı değerler değildir. Herhangi bir sayıda parametre alabilir ve ilk NULL olmayan değeri döner. Örneği inceleyelim.

SELECT FIRST_NAME, LAST_NAME, EMPLOYEE_ID, MANAGER_ID, COMMISSION_PCT,
COALESCE(TO_CHAR(COMMISSION_PCT), TO_CHAR(MANAGER_ID),'YONETİCİ VE KOMİSYON YOK!')
FROM EMPLOYEES;

resimi incelediğinizde mantığını kavrayacaksınız :)

oracle-sql-5-6

CASE Fonksiyonu: SQL sorgusu içinde koşullu sorgulama yapılmasına imkan tanımaktadır ve IF-THEN-ELSE işlevselliğine sahiptir.

CASE WHEN koşul1 THEN sonuc
WHEN koşul2 THEN sonuc
...
ELSE sonuc
END
SELECT last_name,job_id,salary,
CASE job_id WHEN 'IT_PROG' THEN SALARY*1.05
WHEN 'ST_CLERK' THEN SALARY*1.07
WHEN 'SA_REP' THEN SALARY*1.10
ELSE SALARY END "ZAMLI MAASLAR"
FROM EMPLOYEES;
-- IT_PROG çalışanlarına %5 zam yapıldı.
-- ST_CLERK çalışanlarına %7 zam yapıldı.
-- SA_REP çalışanlarına %10 zam yapıldı.
oracle-sql-5-7

Bir diğer örneğimiz :

SELECT FIRST_NAME, LAST_NAME, SALARY,
CASE WHEN SALARY BETWEEN 1000 AND 2500 THEN 'DUSUK'
when SALARY between 2500 and 5000 then 'ORTA'
when SALARY between 5000 and 10000 then 'YUKSEK'
else 'COK YUKSEK' end "CALISAN MAAS DURUMLARI :)"
FROM EMPLOYEES;
oracle-sql-5-8

DECODE Fonksiyonu: Case fonksiyonunun aynısıdır. Kullanım olarak case daha yaygın ve iyidir ;)

SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID,
DECODE (DEPARTMENT_ID
,10 ,'Yönetim Bölümü'
,20 ,'Pazarlama Bölümü'
,30 ,'IT Bölümü'
,'Diğer')"DEPARTMANLAR"
FROM EMPLOYEES;

Bir sonraki yazımda görüşmek üzere. :)

--

--