Önceki dersleri görmek için: http://selimkaratas.com.tr/oracle-11g-r2-egitimi-ders-notlari
3. Single-row SQL functions ( Tek satır SQL Fonksiyonları )
- Verileri işlemek
- Koşulları sağlamak ve değer döndürmek
- Satır başına tek bir sonuç döndürür
- Veri türünü değiştirmek
- İç içe kullanılabilir
Ve çeşit olarak 5 adettir:
- Character
- Number
- Date
- Conversion ( Dönüştürme)
- General
şeklinde 5 adettir.
Fonksiyon Çıktı
LOWER('ORACLE DBA') oracle dba
-- Bütün karakterleri küçük harf yapar.
UPPER('Oracle Dba') ORACLE DBA
--Bütün karakterleri büyük karakter yapar.
INITCAP('oracle dba') Oracle Dba
-- Kelimelerin ilk harflerini büyük yapar.
Bu basit özelliğin kimi zaman ne kadar faydalı olduğuna daha yakından bakalım şimdi.
SELECT employee_id, last_name, department_id FROM employees WHERE last_name = 'king';
şeklinde bir arama yaptığımızda bize boş sonuç döndürecektir. Bunun nedeni veritabanımız da yer alan isimlerin büyük küçük harf duyarlı olması. Bu şekilde belirli standartta arama yaparak veritabanımızı kandırıp bize sonuçları listelemesini sağlayabiliyoruz.
SELECT employee_id, last_name, department_id FROM employees WHERE LOWER(last_name) = 'king'; --burada yaptığımız şey veritabannında bulunan büyük küçük harf --farklılığını lower koyarak küçükmüş gibi gösterip --çağırıyoruz
şeklinde aramamıza rağmen bize sonuçları listelemiş oldu.
INITCAP ile alakalı bir örneğe yakından bakalım.
SELECT employee_id, UPPER(last_name), department_id FROM employees WHERE INITCAP(last_name) = 'Hunold'; /* upper(last_name) olarak tamamladığımız için çıktıda büyük harflerle yazılır. arama yaparken INITCAP(last_name) yaptığımız için ilk harf büyük olarak arar. burada dikkat etmemiz gereken nokta fonksiyona göre arama yapmalıyız. */
Character-Manipulation Functions
SELECT employee_id, CONCAT(first_name, last_name) NAME, job_id, LENGTH (last_name), INSTR(last_name, 'e') "Contains 'e'?" FROM employees WHERE SUBSTR(job_id, 4) = 'PROG'; /* concat ile first_name ve last_name kolonlarını birleştirdik. length ile last_name kararkter uzunluklarını buluyoruz. instr ile last name'de yer alan 'e' karakterinin kaçıncı sırada olduğunu buluyoruz. substr ile job_id'lerin sondan 4 karakterleri arasında 'PROG' yazanları seçiyoruz. */
LPAD / RPAD
SELECT salary, rpad(salary,6,'*') FROM employees; // toplamda 6 karakter yazdırır eğer eksik ise o boşluğa * koyar
SELECT salary, LPAD(salary,10,'*') FROM employees; /* toplamda 10 karakter olacak şekilde ayarlar ve başlangıcına * koyar. telefon numaraları, kredi kartı numaraları gibi yerlerde kullanılabilir. */
REPLACE
select replace
('ŞAMPİYON FENER, ŞAMPİYON2 FENER' ,'ŞAMPİYON2', 'EN BÜYÜK')
FROM DUAL;

TRIM
SELECT LENGTH(TRIM(' ' FROM ' TECH '))
FROM DUAL;
--Boşlukları sil dedik ve uzunluğunu hesapladık.
![CropperCapture[99]](data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==)
SELECT TRIM(BOTH '2' FROM '22TECH222') FROM DUAL; -- kelimenin başı ve sonundaki 2'leri siler.
SELECT TRIM(LEADING '1' FROM '11111TECH114321') FROM DUAL; --kelimenin başındaki 1'leri sildik.
SELECT TRIM(TRAILING '1' FROM '111111TECH11111') FROM DUAL; --kelimenin sonundaki 1'leri sildik.
ROUND Fonksiyonu
SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1) FROM DUAL; /* ROUND yakın olduğu yere doğru yuvarlar. 1. örnekte 45,923 sayısının ondalık kısmındaki 2. karaktere bakarak yuvarlıyoruz. 2. örnekte 45,9 olduğundan 46'ya yuvarlanır. 3. örnekte 45 olduğundan 5 sayısına göre bakarak 4 sayısını 5'e yuvarlarız. */
DUAL sonuçları görüntülemek için kullanabileceğiniz bir boş tablo oluşturarak
işlevleri ve hesaplamaları gösterir.
TRUNC Fonksiyonu
SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-1) FROM DUAL; /*yukarıdaki yorumlardan yola çıkarak. Virgülden sonraki rakamlara dikkat ederek yorumlama yapabiliriz. Burada tek mantık istisnasız aşağı değere yuvarlama yaparız. */
MOD Fonksiyonu
SELECT last_name, salary, MOD(salary, 7000) FROM employees WHERE job_id = 'IT_PROG'; -- Matematiksel MOD işlemidir.
Tarih’lerle Alakalı İşlemler
RR Formatı yakın tarihe göre yorumlar. YY Formatı ise yüzyıl göz önünde bulundurur. Örneğin 1995 tarihinde iken 27-OCT-17 şeklinde bir tarih tanımlanırsa RR Formatına göre bu 2017 olarak yorumlanır. Ancak YY Formatına göre 20. yy göz önünde bulundurularak 1917 olarak yorumlanır.
SYSDATE Fonksiyonu
SELECT sysdate FROM dual;
Tarihler’de Aritmetik İşlemler
SELECT last_name, (SYSDATE-hire_date)/(7*3) AS WEEKS FROM employees WHERE department_id = 60; /* şuanki zamandan hire_date'i çıkarıp 21 değerine böldük. çıktıya weeks yadırdık. bütün bunları department_id=60 için yapıyoruz */
Date-Manipulation Functions
SELECT ROUND(months_between(SYSDATE,'01-OCA-13')) FROM DUAL; /* günümüz tarihi ile 2013 Ocak arasında kaç ay olduğunu bulduk. round kullanımına dikkat edilmeli. Ayrıca tarih formatına dikkat ederek sorgulama yapılmalı.*/
SELECT ADD_MONTHS(SYSDATE,6) FROM DUAL; --6 ay sonrası
SELECT NEXT_DAY(SYSDATE,'CUMARTESİ') FROM DUAL; --bir sonraki cumartesi günü
SELECT LAST_DAY(SYSDATE) FROM DUAL; --ayın son günü
SELECT ROUND(SYSDATE,'MONTH') FROM DUAL; --şubatın 5i olduğı için ayın başına yuvarlar.
SELECT ROUND(SYSDATE,'YEAR') FROM DUAL; --ayın 16sından önce olduğu için ayın başına yuvarlar.
SELECT TRUNC(SYSDATE,'MONTH') FROM DUAL; --16sından büyük olsa bile aşağı değere yuvarlar.
SELECT TRUNC(SYSDATE,'YEAR') FROM DUAL; --yılın başına yuvarlar.








![CropperCapture[99]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture99.png)
![CropperCapture[100]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture100.png)
![CropperCapture[101]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture101.png)
![CropperCapture[102]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture102.png)








![CropperCapture[103]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture103.png)
![CropperCapture[104]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture104.png)
![CropperCapture[105]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture105.png)
![CropperCapture[106]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture106.png)
![CropperCapture[107]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture107.png)
![CropperCapture[108]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture108.png)
![CropperCapture[109]](http://selimkaratas.com.tr-content/uploads/2014/02/CropperCapture109.png)