我將如何在案例陳述中提取年度滾動日期差異?或者,如果有更好的方法可以作業。當 NXT 周年紀念日月份在當月之后時,我需要將日期滾動到下一年。我需要看看 2022 年即將到來的下一個周年紀念日。
例如:

下面是我使用的代碼,它在當年非常有效。
Declare @prevbiz as Date set @prevbiz = DateAdd(day,Case (Datepart(Weekday,Cast(GetDate() as Date)))
When 2 then -3
Else -1
End, Cast(GetDate() as Date));
DECLARE @prev12MONTHS AS DATE set @prev12MONTHS = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 12, DAY(@enddate)-1)
SELECT
ANNUALREVIEWDATE
, 'NXT Anniversary Date' = CASE WHEN DATEADD(yy, DATEDIFF(yy, ANNUALREVIEWDATE, @prevbiz), ANNUALREVIEWDATE) <= @prev12MONTHS
THEN DATEADD(yy, DATEDIFF(yy, ANNUALREVIEWDATE, @prevbiz) -1, ANNUALREVIEWDATE)
ELSE DATEADD(yy, DATEDIFF(yy, ANNUALREVIEWDATE, @prevbiz), ANNUALREVIEWDATE)
END
FROM [table]
uj5u.com熱心網友回復:
我相信你只是想決定周年紀念日是否已經過去,然后應該提前到明年。
datefromparts(
year(getdate())
case when datefromparts(2000, month(getdate()), day(getdate()))
>= datefromparts(2000, month(X), day(X))
then 1 else 0 end,
month(getdate()),
day(getdate())
)
您也可以單獨比較月份和日期部分。2000 年只是一個恰好有閏日的任意年份。
uj5u.com熱心網友回復:
根據我對您的問題的發現,這可能會對您有所幫助。
with dates(annualAnniversary) as (
select DateAdd(month,6,DateAdd(year,-5,cast(GetDate() as date)))
union
select DateAdd(month,3,DateAdd(year,-4,cast(GetDate() as date)))
union
select DateAdd(month,3,DateAdd(year,-1,cast(GetDate() as date)))
union
select DateAdd(month,5,DateAdd(year,-2,cast(GetDate() as date)))
union
select DateAdd(month,2,DateAdd(year,-1,cast(GetDate() as date)))
union
select DateAdd(month,8,DateAdd(year,-3,cast(GetDate() as date)))
union
select DateAdd(month,0,DateAdd(year,0,cast(GetDate() as date)))
)
select annualAnniversary,
DateAdd(year,DATEDIFF(year,annualAnniversary, cast(GetDate() as date)),annualAnniversary) as needsToShow
from dates
為了排除那些不符合自己周年紀念日的行,您可以將其添加到上述代碼中:
where DATEDIFF(year,annualAnniversary, cast(GetDate() as date))>0
帶有原始資料的輸出:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384633.html
標籤:sql sql-server
