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.