SET DATEFIRST

Haftanın ilk günü ülkeye göre ya da kullanılan sisteme göre değişiklik gösterir. Bu değer Amerika için Pazar günüyken, ülkemizde Pazartesi günüdür. Haftanın günleri ile ilgili bir işlem yapılacağı zaman (mesela ayın ilk Pazartesi günü gibi) sistemde kayıtlı olan gün sıralaması istediğimiz sonuçları vermeyebilir. Bu nedenle haftanın ilk gününü kendi ihtiyaçlarımıza göre belirlememiz gerekebilir. Bunun için SET DATEFIRST ifadesini kullanabiliriz. Bu ifade session seviyesinde olup session kapandığında ya da farklı bir session açıldığında geçerli olmayacaktır. İfadenin kullanımı şu şekildedir.

SET DATEFIRST 1

Burada yazacağımız sayısal değerler 1-7 arasında olup, 1 Pazartesi, 7 ise Pazar anlamına gelir. 

SET DATEFIRST 1 -- Haftanın ilk günü Pazartesi
 
SELECT DATEPART(dw,GETDATE())
 
SET DATEFIRST 7 -- Haftanın ilk günü Pazar
 
SELECT DATEPART(dw,GETDATE())

 

Bugünün haftanın kaçıncı günü olduğunu iki farklı değere göre belirledik. Bu ifade session bazlı olduğu için, her kullanmak istediğimizde SET DATEFIRST yazmamız gerekir. Bunu veritabanı seviyesinde kullanmak için aşağıdaki gibi bir stored procedure yazabiliriz. SET DATEFIRST ifadesi kullanıcı tanımlı fonksiyonlar için çalıştırılabilir seviyede olmadığından dolayı fonksiyon olarak yazamamaktayız.

CREATE PROCEDURE usp_DayNumberofWeek(@date DATETIME, @daynumber INT OUTPUT)
AS
BEGIN
SET DATEFIRST 1
SELECT @daynumber= DATEPART(dw,@date)
END
 
EXEC usp_DayNumberofWeek @date='2017-01-01' ,@daynumber=@day OUTPUT
SELECT @day

Eğer parametre olarak şimdiki anı GETDATE() olarak vermek istersek, GETDATE fonksiyonu procedure’lerde parametrenin değeri olarak açık bir şekilde verilemediğinden dolayı başka bir değişkene GETDATE() değerini vererek, @date parametresini, değişkenin değerine eşitleyebiliriz.

Loading

Leave Your Comment