谢谢大家!
我最终综合了您的所有建议来声明上一个、这个和下一个财政年度 (FY)。我们的日期是 11 月 1 日左右,但您可以使用任何日期!
您只需要将 @today 替换为 getdate() 广告,它就会永远运行!您可以通过添加手动日期来测试它,如下面的示例......
我坚持的一个问题是,最后一个日期看起来像是“2014.10.31 00:00:00”而不是“2014.10.31 23:59:59”
您可以使用 DATEADD (S, 86399, @lastFYend) 将其选中,但我需要确保 @fixedend 包含小时分钟和秒。
有什么建议吗?
-- when are we now?
Declare @today smalldatetime; set @today = '2014.10.14' -- for testing, normally set to getdate()
Declare @1NOVthisyear AS smalldatetime; Set @1NOVthisyear = DATEADD(year,DATEDIFF(year,'20010101',@today),'20011101')
Declare @30Octlastyear AS smalldatetime; Set @30Octlastyear = DATEADD(year,DATEDIFF(year,'20010101',@today),'20001031')
Declare @addyears INT; Set @addyears = (Select Case when @today >= @1NOVthisyear then 1 when @today < @1NOVthisyear then 0 END )
-- FY start / End dates
DECLARE @fixedstart VARCHAR(4) = '1101'
DECLARE @fixedend VARCHAR(4) = '1031'
DECLARE @nextnextYear VARCHAR(4) = CONVERT(VARCHAR(4), Year(@today) + @addYears +1)
DECLARE @nextYear VARCHAR(4) = CONVERT(VARCHAR(4), Year(@today) + @addYears)
DECLARE @thisYear VARCHAR(4) = CONVERT(VARCHAR(4), Year(@today) + (@addYears -1))
DECLARE @lastYear VARCHAR(4) = CONVERT(VARCHAR(4), Year(@today) + (@addYears -2))
--starts
DECLARE @nextFYstart DATEtime = CONVERT(smalldatetime, @nextYear + @fixedstart)
DECLARE @thisFYstart DATEtime = CONVERT(smalldatetime, @thisYear + @fixedstart)
DECLARE @lastFYstart DATEtime = CONVERT(smalldatetime, @lastYear + @fixedstart)
--ends
DECLARE @nextFYend DATEtime = CONVERT(smalldatetime, @nextnextYear + @fixedend)
DECLARE @thisFYend DATEtime = CONVERT(smalldatetime, @nextYear + @fixedend)
DECLARE @lastFYend DATEtime = CONVERT(smalldatetime, @thisYear + @fixedend)
Select
---- testing
--@lastFYstart As 'Last FY start',
--DATEADD (S, 86399, @lastFYend) AS 'Last FY End',
--@thisFYstart As 'This FY start',
--DATEADD (S, 86399, @thisFYend) AS 'This FY End',
--@nextFYstart As 'Next FY start',
--DATEADD (S, 86399, @nextFYend) AS 'Next FY End'