Alper ÇELİK

Bilgisayar Mühendisi

Cast & Convert İşlemleri

Cast ve Convert fonksiyonları bir data tipini diğerine dönüştürmek için kullanılır. Yazım şekline bakacak olursak:  
 
CAST(ifade AS datatipi[uzunluk])  
CONVERT(datatipi[uzunluk], ifade, [stil])
 
Şimdi yukarıdaki yazım şeklini yakın mercek inceleyelim.  
 
İfade: Herhangi geçerli bir ifade olabilir.
Örneğin;  SELECT CAST(GETDATE() AS DATE)  
 
Uzunluk: Dönüştürülmek istenen data tipinin uzunluğunu belirtir. Varsayılan olarak yazılmasa bile 30 değerine sahiptir.
 
Stil: Sayısal bir değeri temsil eder. Convert ederken dönüştürme işleminin hangi formatta olacağı buradan belirlenir.
 
Cast ve Convert işlemleri esasen aynı işi yapar ancak Convert fonksiyonu almış olduğu stil parametresinden ötürü sonuç formatında etkin dönüştürme işlemleri yaparak Cast fonksiyonunun önüne geçer. Burada stil parametresi opsiyoneldir.
 
DİPNOT: Convert fonksiyonunda stil parametresi varsayılan olarak aslında 0 (sıfır) dır. Örnek kullanım:
 
SELECT CONVERT(varchar, GETDATE(), 0)
 
Bu ifadede parametre olarak 0 (sıfır) yazsakta yazmasakta bize aynı sonucu verecektir.  
 
 
Örnek Uygulama: Northwind > Employees tablosunda FirstName ve ID kolonlarını birleştirerek araya (-) koyup bu 2 kolonu tek kolonda gösteriniz ?  
Cevap: İstenen kolonlardan biri int diğeri ise nvarchar tipinde dolayısıyla bir cast işlemi yapıyor olmamız gerekir. Sorunun çözümü şu şekilde olacaktır:
 
SELECT EmployeeID, FirstName, [Name-ID]=FirstName + '-' + CAST(EmployeeID AS NVARCHAR)  
FROM Employees  
 
Şimdi stil numaralarına göre birkaç çıktı örneği alalım ve tüm stil numara aralığını tanıyalım..
 
datetime veritipinde tarih kolonum '2011-10-15 16:24:48.653' örnek satırına sahip. Bunun üzerinden aşağıdaki gibi örnek stil çıkışlarını inceleyelim.
 
SELECT CONVERT(varchar(40), tarih,3) from zaman --------------->  15/10/11  
SELECT CONVERT(varchar(40), tarih,4) from zaman --------------->  15.10.11
SELECT CONVERT(varchar(40), tarih,5) from zaman --------------->  15-10-11
SELECT CONVERT(varchar(40), tarih,8) from zaman ---------------> 16:24:48
SELECT CONVERT(varchar(40), tarih,12) from zaman --------------->  111015
SELECT CONVERT(varchar(40), tarih,14) from zaman --------------->  16:24:48:653
SELECT CONVERT(varchar(40), tarih,23) from zaman --------------->  2011-10-15
SELECT CONVERT(varchar(40), tarih,24) from zaman --------------->  16:24:48
SELECT CONVERT(varchar(40), tarih,102) from zaman ---------------> 2011.10.15
SELECT CONVERT(varchar(40), tarih,103) from zaman ---------------> 15/10/2011
SELECT CONVERT(varchar(40), tarih,104) from zaman ---------------> 15.10.2011
SELECT CONVERT(varchar(40), tarih,105) from zaman ---------------> 15-10-2011
SELECT CONVERT(varchar(40), tarih,106) from zaman ---------------> 15 Oct 2011
SELECT CONVERT(varchar(40), tarih,112) from zaman ---------------> 20111015
SELECT CONVERT(varchar(40), tarih,120) from zaman---------------> 2011-10-15 16:24:48   
 
Örnek Uygulama: Aşağıdaki tabloya göre RegisteredDate kolonunu gruplayınız. Saat, dakika bizim için önemli değil. Gün bazında bir gruplama yapmanız bekleniyor.  
 
Bakınız Resim-1.
 
Şu şekilde bir gruplama işlemine bakalım:   
SELECT RegisteredDate, COUNT(ID) AS Total FROM tblRegistration  
GROUP BY RegisteredDate  
 
Böyle bir gruplama işleminde 8 farklı sonuç üretilecektir. Ancak biz sadece tarih(date) kısmıyla ilgileniyoruz. Dolayısıyla bir cast işlemi yapıyor olmamız gerekir. Sorunun çözümüne bakacak olursak:  
 
SELECT CAST(RegisteredDate AS DATE) AS RegisteredDate,  
COUNT(ID) AS Total FROM tblRegistration
GROUP BY CAST(RegisteredDate AS DATE)  
 
SONSÖZ:  
 
* CAST fonksiyonu temelinde ANSI standartlarını temel alır, CONVERT fonksiyonu ise SQL Server'a özgüdür.
* CONVERT fonksiyonu CAST'e göre çok daha esnektir. Örneğin bir datetime datatipinin formatını parametrik rakam kodlarıyla(style number) istediğiniz gibi esnetebilirsiniz.
* Şayet CONVERT fonksiyonunun stil parametrelerinden faydalanmayı düşünmüyor iseniz genel kullanım tavsiyesi CAST fonksiyonudur...
 
Arkadaşlar umarım faydalı bir makale olmuştur. Hepinize iyi çalışmalar diliyorum.

Trigger Serisinin İlk Bölümüne Buradan Ulaşabilirsin

Trigger'lar özelleşmiş bir tür stored prosedürlerdir(SP).