2016-06-01 71 views
-1
>=DateAdd("ww",-9,Date()-Weekday(Date(),0)+1)) 

我有一些SQL編碼中的上述功能,我已經繼承,並正在努力解決它實際上計算任何人都可以幫助?SQL日期 - 函數

+0

SQL Server 2008 –

+0

它看起來更像是一個MS Excel或Access函數。 – gofr1

+0

我以爲這是DAX,但它不是,因爲DAX沒有'DATEADD'功能。但是T-SQL沒有'WEEKDAY'函數,所以這可能只是簡單的VBA。爲您找到此代碼的位置添加上下文。 –

回答

1

考慮將此語句解構爲多個部分。
它已在sql-server 12中進行了測試,並使用GETDATE()而不是Date()函數。

select 
GETDATE() as today, 
@@DATEFIRST as first_day_of_the_week_number, 
DATEPART(WEEKDAY,GETDATE()) as current_day_number_of_the_week, 
GETDATE()-DATEPART(WEEKDAY,GETDATE()) as previous_saturday, 
GETDATE()-DATEPART(WEEKDAY,GETDATE())+1 as previous_sunday, 
DATEADD("ww",-9,GETDATE()-DATEPART(WEEKDAY,GETDATE())+1) as previous_sunday_9_weeks_back; 

所以它會給9周的星期日回來。

注意,它假定@@DATEFIRST等於7
如果@@DATEFIRST等於1,那麼就回路9周的星期一回來。

+2

這實際上完全取決於['@@ DATEFIRST'](https://msdn.microsoft.com/library/ms187766)的價值。 (但是'WeekDay'函數同樣含糊不清,有'0'的第二個參數。) –

+0

@Jeroen不知道那個t-sql quirck。感謝您的洞察力。 – LukStorms