我正在使用 SSMS/SSRS2012 处理报告以捕获当前财政年度的所有工作时间,为此目的是 10 月 1 日至 9 月 30 日。
我正在寻找包含以下内容的案例陈述: 如果当前月份 < 10 (october) then @FYStart = last year if the current month >= 10 那么@FYStart = 当前年份
当我查询
SELECT GETDATE()
这里是格式:2020-06-16 15:24:57.637
我试过以下方法,但只成功了一半。
SELECT CASE WHEN DATEPART(MONTH,(CAST(getdate() AS INT)))>09
THEN YEAR(CAST(getdate() AS INT))
ELSE DATEADD(YEAR,-1,(CAST(getdate() AS INT)))
END
这给了我
2019-06-17 00:00:00.000
的结果,这是朝着正确方向迈出的一步,但是如果我将月份更改为已经过去的月份,
SELECT CASE WHEN DATEPART(MONTH,(CAST(getdate() AS INT)))>03
THEN YEAR(CAST(getdate() AS INT))
ELSE DATEADD(YEAR,-1,(CAST(getdate() AS INT)))
END
我得到这个结果:
1905-07-14 00:00:00.000
这里显然出了问题,但我不确定到底是什么。我认为这与数据类型有关,但我不确定要检查什么/从哪里开始。
所以根据我收集到的信息,您正试图从今天的日期中分离出年份(作为整数)并将其存储在
@FYStart
中。如果今天的日期在十月之前,你想把它分配给去年,如果是十月或更晚,就把它分配给今年,对吗?
如果是这样,试试这个:
DECLARE @FYStart int
SET @FYStart = (
SELECT CASE WHEN DATEPART(MONTH, GETDATE()) < 10
THEN DATEPART(YEAR, DATEADD(YEAR, -1, GETDATE())) -- last year
ELSE DATEPART(YEAR, GETDATE()) -- this year
END
)
除非我忽略了某些东西,否则它不只是像...那么简单
SELECT CASE WHEN MONTH(getdate()) <10
THEN YEAR(getdate()) -1
ELSE YEAR(getdate())
END
扩展@cpalmer 的内容,以下内容将允许您查询日期列为自会计年度开始 的数据,基于查询运行的当前日期。
这将允许报告/查询是非静态的。
DECLARE @CurrentFiscalYearStart Date;
SET @CurrentFiscalYearStart = (
SELECT CAST(CAST(CASE WHEN DATEPART(MONTH, GETDATE()) < 10
THEN DATEPART(YEAR, DATEADD(YEAR, -1, GETDATE())) -- last year
ELSE DATEPART(YEAR, GETDATE()) -- this year
END AS VARCHAR) +'-10-01' AS Date)
)
SELECT @CurrentFiscalYearStart AS FiscalYearStart; -- example
SELECT TOP(100) * FROM Table WHERE DateColumn >= @CurrentFiscalYearStart ORDER BY DateColumn; -- example in query
注意:将SQL中两处的10替换为公司会计年度的月份等
这将返回一个比较日期,而不是一个年份整数。