Sql-Server

確定每個月的第三個星期五

  • January 4, 2018

我需要在 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;

您也可以使用weekdaywith datepart(),但使用 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;

引用自:https://dba.stackexchange.com/questions/120488