2015-10-20 65 views
1

我一直在使用C#函數來獲取星期幾,並且我需要在T-SQL中使用類似的函數來獲得相同的結果。在SQL Server中獲取按月份的星期(需要類似於C#功能的T-SQL函數)

public static int GetWeekNumberOfMonth(DateTime date) 
{ 
    date = date.Date; 

    DateTime firstMonthDay = new DateTime(date.Year, date.Month, 1); 

    var mon = (int)DayOfWeek.Monday; 
    var dofw = (int)firstMonthDay.DayOfWeek; 

    DateTime firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7); 

    if (firstMonthMonday > date) 
    { 
     firstMonthDay = firstMonthDay.AddMonths(-1); 
     firstMonthMonday = firstMonthDay.AddDays((DayOfWeek.Monday + 7 - firstMonthDay.DayOfWeek) % 7); 
    } 

    return (date - firstMonthMonday).Days/7 + 1; 
} 
+0

SQL一邊的任何努力? –

+0

我需要將c#函數精確轉換爲mssql – Ravi

+0

在哪種情況下,您需要「9月的第X周」,其中X = 1是9月份開始的第一週嗎?這是一個奇怪的符號,你確定你的用戶會熟悉這個嗎?那麼9月的第一週是什麼時間?八月第五週? –

回答

0

嘗試這樣的:

DECLARE @d DATETIME 
SET @d = '2015-10-20' 

SELECT DATEPART(WEEK, @d) - 
    DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,@d), 0))+ 1 AS WEEK_OF_MONTH 
+0

如果我們使用日期@d ='2015-9-30'那麼它重新啓動第5周,但實際上它的第4周 – Ravi

+0

@Ravi: - 不,考慮'2015-9-1'作爲星期開始和第1周那麼第1周結束於'2015-9-3',然後第2周開始。 –

+0

: - 我需要從星期一開始 – Ravi

相關問題