2012-12-21 143 views

回答

9

1900年1月5日是星期五。這將使用該基準日期並計算任意給定月份的上個星期五,儘管您必須在月份中給出日期而不僅僅是月份本身。帶有日期在一個月替換這個2012-12-01

SELECT DATEADD(DY,DATEDIFF(DY,'1900-01-05',DATEADD(MM,DATEDIFF(MM,0,'2012-12-01'),30))/7*7,'1900-01-05') 

您也可以使用此通過更換1900-01-05 WITH 1900-01-06

+0

非常好的解決方案,我測試了所有的情況,它的工作原理 –

+1

如果用戶的語言不是英語,這很容易通過將'5-Jan-1900'改爲'19000105'解決。但是依靠代碼中的'魔術'數字和日期是一種相當可疑的做法,因爲任何讀代碼的人都不明白他們的真正含義。特別是如果原始程序員不留下任何評論,維護這樣的代碼可能會非常困難。 – Pondlife

+0

你在跟蹤我嗎? :-) –

2

獲得的最後一個星期六這將是使用calendar table簡單得多;創建你自己的需要適當的列後,你可以這樣寫:

select 
    max([Date]) 
from 
    dbo.Calendar 
where 
    YearAndMonth = 201211 and 
    DayOfWeek = 'Friday' 

日曆表一般是確定的日期比使用功能的更好的解決方案,因爲代碼是更具可讀性,你可以使用自己的諸如WeekNumber,FinancialQuarter之類的東西的定義在國家甚至公司之間差別很大。

相關問題