Sql-Server
確定每個月的第三個星期五
我需要在 SQL Server 中確定日期範圍為“1.1.1996 - 30.8.2014”的“每個月的第三個星期五”的日期。
我希望我應該使用
DENSE_RANK()
和的組合PARTITION BY()
來設置“rank = 3”。但是,我是 SQL 新手,無法找到正確的程式碼。
鑑於:
- 星期五被稱為“星期五”
- 每月的第三個星期五總是從每月的 15 日到 21 日
select thedate from yourtable where datename(weekday, thedate) = 'Friday' and datepart(day, thedate)>=15 and datepart(day, thedate)<=21;
您也可以使用
weekday
withdatepart()
,但使用 IMO 名稱更具可讀性。字元串比較顯然會更慢。
為了獲得獨立於語言/文化的答案,您需要考慮不同的工作日名稱和一周的開始時間。
在意大利,星期五是“Venerdì”,一周的第一天是星期一,而不是美國的星期日。
1900-01-01
是星期一,因此我們可以使用此資訊以獨立於語言環境的方式計算工作日:WITH dates AS ( SELECT DATEADD(day, number, GETDATE()) AS theDate FROM master.dbo.spt_values WHERE type = 'P' ) SELECT theDate, DATENAME(dw, theDate), DATEPART(dw, theDate) FROM dates WHERE DATEDIFF(day, '19000101', theDate) % 7 = 4 AND DATEPART(day, thedate)>=15 and DATEPART(day, thedate)<=21;