簡體   English   中英

T-SQL獲取一年中的最后一個星期五發薪日

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM