Son Haberler
Anasayfa / Yazılım / SQL / DATEADD Fonksiyonu

DATEADD Fonksiyonu

DATEADD fonksiyonu ile bir tarih üzerine ekleme yani bir tarih üzerine toplama yapabiliriz. Bu fonksiyon 3 parametreye ihtiyaç duymaktadır. Tarihin hangi kısmına ekleme yapılacağı (yani ay mı, gün mü, yıl mı bilgisi), eklenecek değer ve geçerli bir tarih verisi. DATEADD fonksiyonu olduğu gibi DATESUBTRACT diye bir fonksiyon olduğunu düşünebilirsiniz ancak T-SQL böyle bir fonksiyona sahip değildir. Dolayısı ile bir tarih çıkarmak için negatif değer kullanmanız gerekiyor. Örneğin bir e-ticaret uygulamasında bir ödemenin gerçekleme tarihinin 7 gün sonra olmasını sağlamak gibi işlemler, ya da belli bir işin sonucunun sonlanma tarihini bulmak gibi işlemler için bu fonksiyon kullanılabilir.

DATEADD(hangi tarih dilimi,eklenecek sayı, tarih verisi)

AdventureWorks veritabanını kullanarak aşağıdaki sorguları çalıştıralım :

SELECT OrderDate, DATEADD(year,3,OrderDate) AS "3 Yıl ekledim",
DATEADD(month,3,OrderDate) AS "3 Ay ekledim",
DATEADD(day,-3,OrderDate) AS "3 gün çıkardım"
FROM Sales.SalesOrderHeader
WHERE SalesOrderID in (43659,43714,58393,56372,60621)

Sales.SalesOrderHeader tablosunda OrderDate alanınında yıl ve ay hanesini 3 arttırdım ve gün hanesini 3 azalttım. Bunlardan SalesOrderID değerleri 43659,43714,58393,56372,60621 olan satırları listeliyorum.

150102

SQL Server tarih bazlı işlem yaptığı için tarih toplamında hata yapmaz. Mesela Şubat ayını ele alalım 28 gün çekmektedir, 4 yıl da bir de 29 gün çekmektedir. SQL Server 2012 bunu dahi dikkate alarak işlem yapar. Kanıtlayalım. Aşağıdaki iki sorguyu da çalıştırıyorum :

SELECT DATEADD(month,1,'1/29/2013') AS "Şubat Ayı"
SELECT DATEADD(month,1,'1/29/2012') AS "Şubat Ayı"

Bakın bakalım sonuçlar nasıl :

150103

Görüldüğü üzere iki sorguda da 29 ocak üzerine 1 ay ekleme yaptım. Birinde 2013 için 28 Şubat gösterirken, 2012 için 29 şubat gösterdi. Yani SQL Server 2012 artık yıl kavramını dahi dikkate alarak DATEADD fonksiyonunu kullandı. Bu konuda SQL 2012 Server’a güvenebiliriz 🙂

Bir sonraki yazıda görüşmek üzere..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir