[英]T-SQL Getting the Last Friday Payday of the year
知道2013年1/3 /是發薪日,並且每兩周給我們付款,我可以用以下公式計算未來的發薪日期。 這段代碼告訴我,2013年12月20日是發薪日。 沒錯
declare @StartDate datetime = '1/4/13'
declare @FromDate datetime = '12/15/' + cast(year(getdate()) - 1 as char(4))
select dateadd(day, 14*cast(datediff(day, @StartDate, @FromDate) / 14 + 1 as int), @StartDate)
我需要做的是計算一年中的最后一個發薪日。 如果我將@FromDate設置為2013年12月15日,則可以使用此方法,但是在12月為三個檢查月的情況下,我認為我不能依靠它。 我的偏好是將FromDate設置為12/01 / YYYY並獲得該年的最后一個發薪日,但是我似乎無法確定如何實現這一目標。
我如何更改此設置以獲取一年中的最后一個發薪日(總是星期五)?
在此先感謝您提出的建議。
使用日期維度表可以很容易地做到這一點。 使用鏈接中的示例,查詢將如下所示:
SELECT TOP 1 [Date] FROM DimDate
WHERE DATEPART(dw, [Date]) = 6 --is Friday
AND DATEPART(wk, [Date]) % 2 = 0--Is an even week
AND YEAR([Date]) = YEAR(getdate())--Current year
ORDER BY [Date] DESC
考慮到它將始終是該年的最后一個星期五或倒數第二個星期五,這應該起作用:
declare @startdate datetime='20140110'
declare @lastdayofyear datetime='20141231'
select
case datediff(WEEK,@startdate,dateadd(day,6-datepart(w,@lastdayofyear)-7,@lastdayofyear)) % 2
when 0 then
dateadd(day,datepart(w,6-@lastdayofyear)-7,@lastdayofyear)
else
dateadd(day,datepart(w,6-@lastdayofyear)-14,@lastdayofyear)
end
一年有52周。 假設在這里似乎是每兩周支付一次,則可以在開始日期加上50周以獲取一年中的最后一個日期。
declare @StartDate datetime = '1/4/13'
declare @FromDate datetime = '12/15/' + cast(year(getdate()) - 1 as char(4))
select dateadd(week, 50, @StartDate)
set @StartDate = '1/3/14'
select dateadd(week, 50, @StartDate)
第一結果是12/20/2013。 第二個結果是2014年12月19日。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.