Oracle SQL, çeşitli görevler için kullanılabilecek zengin bir yerleşik fonksiyon kitaplığı sağlar. Bir fonksiyonun temel yetenekleri, dizgilerin büyük/küçük harf dönüşümü, dizgi içi veya alt dizgi işlemleri, sayısal veriler üzerinde matematiksel hesaplamalar ve tarih tipi değerler üzerinde tarih işlemleri olabilir. SQL İşlevleri isteğe bağlı olarak kullanıcıdan bağımsız değişkenler alır ve zorunlu olarak bir değer döndürür.
Daha geniş bir kategoride iki tür fonksiyon vardır:
- Tek Satır fonksiyonları– Tek satır fonksiyonları, tek satırda çalışan ve satır başına bir çıktı döndüren işlevlerdir. Örneğin, uzunluk ve büyük/küçük harf dönüştürme işlevleri tek satırlık işlevlerdir.
- Çoklu Satır fonksiyonları– Birden çok satır işlevi, satır grubu üzerinde çalışır ve tüm satır kümesi için bir sonuç döndürür. Grup Fonksiyonları olarak da bilinirler.
Bu yazıda Single Row Functions(Tek Satır İşlevleri) neler olduğunu öğreneceksiniz.
Not: Aşağıdaki sorgulamalar ve örnekler ogrenci tablosu üzerinde yapılacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | CREATE TABLE ogrenci ( ogrno NUMBER GENERATED BY DEFAULT AS IDENTITY, ograd varchar(25) DEFAULT NULL, ogrsoyad varchar(25) DEFAULT NULL, cinsiyet char(1) DEFAULT NULL, dtarih date DEFAULT NULL, sinif varchar(4) DEFAULT NULL, puan NUMBER, PRIMARY KEY (ogrno) ) INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (1, 'Hülya', 'Yiğit', 'K', TO_DATE('1998-04-08','YYYY-MM-DD'), '10A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (2, 'Niyazi', 'Sevinç', 'E', TO_DATE('1998-11-11','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (3, 'İsmail', 'Sevinç', 'E', TO_DATE('1998-04-17','YYYY-MM-DD'), '10B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (4, 'Kenan', 'Emin', 'E', TO_DATE('1996-02-23','YYYY-MM-DD'), '9A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (5, 'Sema', 'Bakır', 'K', TO_DATE('1998-04-07','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (6, 'Deniz', 'Kara', 'E', TO_DATE('1997-07-21','YYYY-MM-DD'), '9C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (8, 'Sema', 'Rüzgar', 'K', TO_DATE('1997-11-14','YYYY-MM-DD'), '9C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (9, 'Fadime', 'Dönmez', 'K', TO_DATE('1997-09-11','YYYY-MM-DD'), '9A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (10, 'Rıza', 'Koç', 'E', TO_DATE('1998-01-26','YYYY-MM-DD'), '10B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (11, 'Ceylan', 'Kabak', 'K', TO_DATE('1996-02-02','YYYY-MM-DD'), '10B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (12, 'Deniz', 'Akçakaya', 'E', TO_DATE('1997-01-24','YYYY-MM-DD'), '11A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (13, 'Kemal', 'Karapınar', 'E', TO_DATE('1998-10-23','YYYY-MM-DD'), '11A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (14, 'Derya', 'Yılbur', 'K', TO_DATE('1998-08-12','YYYY-MM-DD'), '10C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (15, 'Filiz', 'Akat', 'K', TO_DATE('1997-09-09','YYYY-MM-DD'), '10A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (16, 'Niyazi', 'Dönmez', 'E', TO_DATE('1996-05-08','YYYY-MM-DD'), '11A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (17, 'Sema', 'Sekmen', 'K', TO_DATE('1998-08-16','YYYY-MM-DD'), '10B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (18, 'İsmail', 'Balcı', 'E', TO_DATE('1998-09-09','YYYY-MM-DD'), '9C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (19, 'Ahmet', 'Yıldız', 'E', TO_DATE('1997-04-25','YYYY-MM-DD'), '11A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (20, 'Hasan', 'Alp', 'E', TO_DATE('1998-10-20','YYYY-MM-DD'), '9A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (21, 'Derya', 'Şahin', 'K', TO_DATE('1997-01-25','YYYY-MM-DD'), '9C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (22, 'Süleyman', 'Rüzgar', 'E', TO_DATE('1997-11-20','YYYY-MM-DD'), '10C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (23, 'Fatma', 'Akçakaya', 'K', TO_DATE('1997-11-23','YYYY-MM-DD'), NULL, 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (24, 'Fidan', 'Taşdemir', 'K', TO_DATE('1998-01-04','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (25, 'Cemil', 'Yazar', 'E', TO_DATE('1996-07-13','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (26, 'Hülya', 'Yiğit', 'K', TO_DATE('1998-01-03','YYYY-MM-DD'), NULL, 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (27, 'Mustafa', 'Can', 'E', TO_DATE('1996-03-10','YYYY-MM-DD'), '10C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (28, 'İsmail', 'Kara', 'E', TO_DATE('1997-08-12','YYYY-MM-DD'), '9A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (29, 'Ali', 'Çamak', 'E', TO_DATE('1996-04-22','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (30, 'Mümtaz', 'Topal', 'E', TO_DATE('1996-05-22','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (31, 'Filiz', 'Ezer', 'K', TO_DATE('1997-03-26','YYYY-MM-DD'), '9C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (32, 'İsmail', 'Yiğit', 'E', TO_DATE('1998-10-10','YYYY-MM-DD'), '9C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (33, 'Ayşe', 'Çamak', 'K', TO_DATE('1997-07-22','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (34, 'Sabri', 'Can', 'E', TO_DATE('1997-02-26','YYYY-MM-DD'), '9B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (35, 'Derya', 'Küçük', 'K', TO_DATE('1997-05-28','YYYY-MM-DD'), '10A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (36, 'Rıza', 'Yıldız', 'E', TO_DATE('1997-10-11','YYYY-MM-DD'), '10C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (37, 'Şenol', 'Dağ', 'E', TO_DATE('1997-04-14','YYYY-MM-DD'), '10B', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (38, 'Hülya', 'Balcı', 'K', TO_DATE('1998-05-19','YYYY-MM-DD'), '10C', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (39, 'Hakkı', 'Akçakaya', 'E', TO_DATE('1996-01-10','YYYY-MM-DD'), '11A', 0); INSERT INTO ogrenci (ogrno, ograd, ogrsoyad, cinsiyet, dtarih, sinif, puan) VALUES (40, 'Süleyman', 'Kılıç', 'E', TO_DATE('1996-02-09','YYYY-MM-DD'), '11A', 0); |
SQL’de Tek satırlı fonksiyon türleri
- Karakter Fonksiyonu
- Genel Fonksiyonu
- Harf dönüştürme Fonksiyonu
- Tarih Fonksiyonu
- Sayı Fonksiyonu
Karakter Fonksiyonları
CONCAT işlevi, iki dize değerini birleştirmek için kullanılır.
Örnek: Ad soyadı birleştirin
1 2 3 | SELECT CONCAT(ograd,ogrsoyad) AS ADSOY FROM ogrenci; |

LENGTH işlevi, giriş karakterinin uzunluğunu döndürür.
1 2 3 | SELECT ograd, LENGTH(ograd) AS uzunluk FROM ogrenci; |

SUBSTR işlevi, belirli bir başlangıç noktasından bitiş noktasına bir dizenin bir bölümünü döndürür.
1 2 3 | SELECT substr('Merhaba Dünya',4,3) FROM DUAL; |

1 2 3 | SELECT substr('Merhaba Dünya',5) FROM DUAL; |

INSTR işlevi, belirli bir sırada bir karakterin veya bir dizenin sayısal konumunu döndürür.
1 2 3 | SELECT instr('Merhaba dünya ben E.T.','dünya') FROM DUAL; |

1 2 3 | SELECT instr('Merhaba dünya, bu dünya benim dünyam','dünya',1,2) FROM DUAL; |

LPAD ve RPAD işlevleri, verilen dizeyi belirli bir türle belirli bir uzunluğa kadar doldurur.
1 2 3 | SELECT lpad('Hayri',10,'-') FROM DUAL; |

1 2 3 | SELECT RPAD('Hayri',10,'-') FROM DUAL; |

TRIM işlevi, veri girişini baştan veya sondan keser.
1 2 3 | SELECT TRIM(' TASARIM ') AS TrimmedString from dual; |

1 2 3 | SELECT TRIM('H' FROM 'HAYRI') FROM DUAL; |

1 2 3 | SELECT TRIM('HA' FROM 'HAYRI') FROM DUAL; |

REPLACE işlevi, giriş karakterindeki karakterleri değiştirir.
1 2 3 | SELECT replace('ORACLE DATA BACKUP', 'DATA','DATABASE') FROM DUAL; |

1 2 3 | SELECT ograd, REPLACE(OGRAD,OGRAD,CONCAT(OGRAD,' ',OGRSOYAD)) FROM ogrenci; |

Genel Fonksiyonlar
NVL: NVL işlevi, girdi olarak iki bağımsız değişken alır. İlk argüman NULL ise, ikinci argümanı döndürür, aksi halde ilk argümanı döndürür.
Örnek: İlk değer 10 olduğu için bu değeri döndürüyor.
1 2 3 | SELECT NVL(10,2) FROM DUAL; |

Örnek: İlk değer NULL olduğu için ikinci değeri döndürüyor.
1 2 3 | SELECT NVL(NULL,'Oracle') FROM DUAL; |
Örnek: İlk değer null olduğu için ikinci argümanı döndürüyor.
1 2 3 | SELECT NVL(NULL,NULL) FROM DUAL; |
Örnek: Öğrenci tablosunda sınıfı NULL olan öğrencilerin sınıfına SINIFI YOK yazdırarak getiren sorguyu yazın.
1 2 3 | SELECT ograd, ogrsoyad, NVL(sinif,'SINIFI YOK') FROM ogrenci; |

NVL2 işlevi, girdisi olarak üç bağımsız değişken alır. İfade1 NULL DEĞİLSE, ifade2’yi döndürür, İfade1 NULL ise, ifade3’ü döndürür.
Örnek:
1 2 3 | SELECT NVL2('Oracle','Birinci İfade','İkinci İfade') FROM DUAL; |

Örnek:
1 2 3 | SELECT NVL2(NULL,'Birinci İfade','İkinci İfade') FROM DUAL; |

Örnek:
1 2 3 | SELECT ograd,ogrsoyad, NVL2(SINIF,'SINIF VAR','SINIF YOK') as SINIF_DURUM FROM ogrenci |

NULLIF işlevi iki ifadeyi karşılaştırır ve eşitlerse NULL döndürür, aksi takdirde ilk ifadeyi döndürür.
Örnek:
1 2 3 | SELECT NULLIF('Oracle','MYSQL') FROM DUAL; |

Örnek:
1 2 3 | SELECT NULLIF('MYSQL','MYSQL') FROM DUAL; |

COALESCE işlevi, girdisi olarak N sayıda bağımsız değişken alır ve ilk NULL OLMAYAN bağımsız değişkeni döndürür.
Örnek:
1 2 3 | SELECT COALESCE('DB Backup','Oracle') FROM DUAL; |

Örnek:
1 2 3 | SELECT COALESCE(NULL,'MYSQL',NULL) FROM DUAL; |

DECODE işlevi, sorguya prosedürel if-then-else mantığı eklememizi sağlar. DECODE, ifadeyi her arama değeriyle tek tek karşılaştırır. İfade bir aramaya eşitse, ilgili sonuç Oracle Veritabanı tarafından döndürülür.
1 2 3 | SELECT DECODE(1, 1, 'Bir') FROM DUAL; |
IF ELSE Karşılığı
1 2 3 4 5 | IF 1 = 1 THEN RETURN 'Bir'; END IF |

Harf dönüştürme Fonksiyonları
UPPER: Küçük karakterleri büyük karaktere dönüştürür. Metinsel bir ifade alıp büyük karakterlerden oluşan metni döndürür. SELECT ifadesi içindeki tüm satırlara bu fonksiyonu uygular.
Örnek:
1 2 3 | SELECT UPPER('hayri koç') AS ADSOYAD FROM DUAL; |

Örnek:
1 2 3 | SELECT UPPER(ograd), UPPER(ogrsoyad) FROM ogrenci; |

Örnek:
1 2 3 4 | SELECT ograd,ogrsoyad FROM ogrenci WHERE UPPER(ograd)='DENIZ'; |

LOWER: Büyük karakterleri küçük karaktere dönüştürür. Metinsel bir ifade alıp küçük karakterlerden oluşan metni döndürür. SELECT ifadesi içindeki tüm satırlara bu fonksiyonu uygular.
Örnek:
1 2 3 | SELECT LOWER('HAYRİ Koç') AS ADSOYAD FROM DUAL; |

Örnek:
1 2 3 | SELECT LOWER(ograd), LOWER(ogrsoyad) FROM ogrenci; |

Initcap : Her kelimenin ilk karakterini büyük yapar. SELECT ifadesi içindeki tüm satırlara bu fonksiyonu uygular.
Örnek:
1 2 3 | SELECT INITCAP('hayri KOÇ') AS ADSOYAD FROM DUAL; |

Tarih Fonksiyonları
SYSDATE işlevi, geçerli oracle veritabanı sunucusu tarih ve saatini döndürür.
1 2 3 | SELECT SYSDATE FROM DUAL; |

MONTHS_BETWEEN işlevi girdiğimiz iki tarih arasındaki ayların toplamını döndürür.
Örnek:Tanımlı iki tarih arasındaki ay farkını getirir.
1 2 3 | SELECT MONTHS_BETWEEN('01-HAZ-2005', '23-HAZ-2000') FROM DUAL; |

Örnek: Öğrencilerin doğum tarihinden şu ana kadar geçen ayları gösterir.
1 2 3 | SELECT ograd, ogrsoyad,dtarih, MONTHS_BETWEEN(SYSDATE, dtarih) AS AY_FARKI FROM ogrenci; |

Örnek: ROUND kullanarak ayları yuvarlayın.
1 2 3 4 | SELECT ograd, ogrsoyad,dtarih, ROUND( MONTHS_BETWEEN(SYSDATE, dtarih)) AS AY_FARKI FROM ogrenci; |

ADD_MONTHS işlevi, belirtilen bir tarihe ‘n’ ay sayısını ekler.
Örnek: Güncel tarihe 3 ay ekler.
1 2 3 | SELECT ADD_MONTHS(SYSDATE,3) FROM DUAL; |

NEXT_DAY işlevi, girdiğimiz verilerin bir sonraki gününü döndürür.
1 2 3 | SELECT ograd, ogrsoyad,dtarih, NEXT_DAY(dtarih,'PAZAR') AS SONRAKI_GUN FROM ogrenci; |

LAST_DAY işlevi, girdiğimiz tarihin ayının son gününü döndürür.
1 2 3 | SELECT ograd, ogrsoyad,dtarih, LAST_DAY(dtarih) AS SONRAKI_GUN FROM ogrenci; |

ROUND Kullanımı:
Örnek: Sistem tarihini aya yuvarla
1 2 3 | SELECT ROUND(SYSDATE,'MONTH') FROM DUAL; |

Örnek:
1 2 3 | SELECT ROUND(dtarih,'MONTH'),dtarih FROM ogrenci; |

Örnek:
1 2 3 | SELECT ROUND(dtarih,'YEAR'),dtarih FROM ogrenci; |

TRUNC Kullanımı
Örnek: Aşağı yuvarlar
1 2 3 | SELECT TRUNC(dtarih,'MONTH'),dtarih FROM ogrenci; |

Tarihler ile aritmetik işlemler
Tarihlere gün veya saat sayısını ekleyebilir veya çıkarabilirsiniz. Tarihleri de çıkarabilirsiniz.
Örnek : Gün ekleme
1 2 3 | SELECT SYSDATE + 2 AS "gunekle" FROM DUAL; |

Örnek: Gün çıkarma
1 2 3 | SELECT SYSDATE-3 AS "GUNCIKAR" FROM DUAL; |

Örnek: Saat ekleme
1 2 3 | SELECT CURRENT_TIMESTAMP + 10/24 AS "SAATEKLE" FROM DUAL; |

Örnek: Tarih farkını gösterir
1 2 3 | SELECT SYSDATE-TO_DATE('10/03/2005') "TARIHFARKI" FROM DUAL; |

Sayı Fonksiyonları
ROUND ve TRUNC işlevleri, sayı değerini yuvarlamak ve kısaltmak için kullanılır.
Örnekler
1 2 3 | SELECT ROUND(123.67,1) FROM DUAL; |

1 2 3 | SELECT ROUND(123.67) FROM DUAL; |

1 2 3 | SELECT ROUND(123.67,-1) FROM DUAL; |

1 2 3 | SELECT TRUNC(123.67,1) FROM DUAL; |

1 2 3 | SELECT TRUNC(123.67) FROM DUAL; |

MOD, bölme yönteminin kalanını iki sayı arasında döndürmek için kullanılır.
1 2 3 | SELECT mod(24,7) FROM DUAL; |











Yorum Yap