Alper ÇELİK

Bilgisayar Mühendisi

* Built in datetime functions *

CURRENT_TIMESTAMP
Getdate() fonksiyonunun ANSI SQL karşılığıdır. Nondeterministic özellik taşır.  
 
DATEADD()
Geriye datetime tipinde dönüş sağlar. Deterministic özellik taşır.  
Select DATEADD(datepart, Icrement, DateColumn)  
 
 
DATEDIFF()
Geriye int tipinde dönüş sağlar. Deterministic özellik taşır.  
Select DATEDIFF(datepart, StartingDate, EndingDate)
 
 
DATENAME()
Geriye string tipinde dönüş sağlar. Nondeterministic özellik taşır.
SELECT DATENAME(datepart, DateColumn)  
 
 
 DATEPART()
Geriye int tipinde dönüş sağlar. Nondeterministic özellik taşır.  
SELECT DATEPART(datepart, DateColumn)  
 
 
DAY()
Geriye int tipinde dönüş sağlar. Deterministic özellik taşır.  
SELECT DAY(DateColumn)  
 
 
GETDATE()
Geriye datetime tipinde dönüş sağlar. Nondeterministic özellik taşır.
 
 
GETUTCDATE()
Geriye datetime tipinde dönüş sağlar. Güncel zamanı UTC (Coordinated Universal Time) olarak döndürür. Nondeterministic özellik taşır.
SELECT GETUTCDATE()  
 
 
ISDATE()
Geriye int değer döndürür. Şayet girilen tarih ifadesi(date, time, datetime) geçerli ise 1 değeri, geçersiz ise 0 değerini döndürür. Bu kural datetime2 veri tipi için istisna oluşturur ve geriye 0 geri dönüşü sağlanır. Deterministic özellik taşır. (CONVERT fonksiyonu kullanılması ve 0, 9, 100, 109 parametre kodlarını almamak şartıyla)  
SELECT ISDATE(DateColumn)  
 
MONTH()
Geriye int değer döndürür. Deterministic özellik taşır.
SELECT MONTH(DateColumn)  
 
SYSDATETIME()
Geriye datetime2 tipinde dönüş sağlar. Nondeterministic özellik taşır.
SELECT SYSDATETIME()  
 
SYSDATETIMEOFFSET()
Geriye Sysdatetimeoffset tipinde değer döndürür. UTC değerini de döndürür. Nondeterministic özellik taşır.
SELECT SYSDATETIMEOFFSET()   
 
SYSUTCDATETIME()
Geriye datetime2 tipinde değer döndürür. Nondeterministic özellik taşır.
SELECT SYSUTCDATETIME()   
 
YEAR()
Geriye int tipinde değer döndürür. Deterministic özellik taşır.
SELECT YEAR(DateColumn)    
 
 
Hemen hemen tüm built in datetime fonksiyonlarını anlattık. Şimdi kafalarda soru işareti bırakmamak adına yukarda bahsettiğim bazı kavramları detaylandıralım istiyorum. Örneğin; Deterministic/Nondeterministic kavramları gibi.
 
Her çağrıldığında aynı sonucu dönen değerler deterministic olarak adlandırılır. SELECT YEAR(GETDATE()) sorgusu her defasında aynı sonucu döneceği için deterministic fonksiyona örnektir.
Her çağrıldığında farklı sonuçlar dönen değerler ise Non-deterministic olarak adlandırılır. SELECT GETDATE() sorgusu buna en güzel örnektir. Her çağırdığınızda farklı bir sonuç üretileceği için Non-determenistic olarak adlandırılır.  
 
 
Yukarıda built in function'ları örneklendirirken, datepart şeklinde zaman fonksiyonu alacağını belirttim. Buna istinaden aşağıdaki örnek şema tablosunda tüm datepart fonksiyonlarını görebilirsiniz. Yanındaki sütun ise ilgili datepart'ın kısaltması (Abbreviations) anlamına gelecek satırı ifade ediyor. Her şekilde aynı çıktı üretilecektir ancak okunabilirliği sağlamak adına uzun halini yazmanızı tavsiye ederim.  
 
Bakınız Resim-1.
 
 
---------------------------------------------------------------------  
Şimdi örnekler üzerinden soru - cevap şeklinde ilerleyeceğiz. Soruların cevabına bakmadan, önce kendiniz cevaplamaya çalışınız lütfen.   
 
 
Bakınız Resim-2.
 
Zaman adında bir tablo ve birde tarih adında kolon oluşturup tipinede datetime dedim. Şimdi bunun üzerinden soru - cevap örnekler yapmaya başlıyoruz.  
 
Soru: Tarih kolonunu fonksiyonla sorgulayıp geçerli olup olmadığını gösteriniz.
Cevap:    SELECT ISDATE(Tarih) FROM zaman    
 
Soru: Tarih kolonunda bulunan satır haftanın hangi gününe denk gelir ? (Örn: Cuma, cumartesi şeklinde çıktısını alınız.)
Cevap:    SELECT DATENAME(WEEKDAY,Tarih) FROM zaman    
 
Soru: Tarih kolonunda bulunan satıra 3 gün ekleyiniz ve haftanın hangi gününe denk geldiğini gösteriniz ? (Örn: Cuma, cumartesi şeklinde çıktısını alınız.)
Cevap:   SELECT DATENAME(DW,DATEADD(WEEKDAY,3,Tarih)) FROM zaman
(weekday kısaltması olan DW kullanımına dikkat.)   
 
Soru: Tarih kolonunda bulunan satır için; 3 ay sonra yılın kaçıncı çeyreğine denk gelir ?  
Cevap:    SELECT DATENAME(QUARTER, DATEADD(MONTH,3,Tarih)) FROM zaman   
 
Soru: Tarih kolonunu Ay + Yıl şeklinde çıktısını alınız. Örneğin: Ekim 2010 gibi.
Cevap:    SELECT DATENAME(MONTH, Tarih) +space(1) + DATENAME(YEAR,Tarih) FROM zaman  
 
 
Soru: Tarih kolonu üzerindeki satır ile günümüz arasında kaç yıllık fark olduğunu gösteriniz.  
Cevap:    SELECT DATEDIFF(YEAR, Tarih, GETDATE())  FROM zaman   
 
Faydalı bir makale olduğunu umut ediyorum. Sonraki makalelerimde görüşmek üzere. Hepinize iyi çalışmalar dilerim.
 

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

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