当前日期的财政年度

问题描述 投票:0回答:3

我正在使用 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

这里显然出了问题,但我不确定到底是什么。我认为这与数据类型有关,但我不确定要检查什么/从哪里开始。

sql date type-conversion ssrs-2012
3个回答
1
投票

所以根据我收集到的信息,您正试图从今天的日期中分离出年份(作为整数)并将其存储在

@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
    )

0
投票

除非我忽略了某些东西,否则它不只是像...那么简单

SELECT CASE WHEN MONTH(getdate()) <10
        THEN YEAR(getdate()) -1
        ELSE YEAR(getdate())
        END

0
投票

扩展@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替换为公司会计年度的月份等

这将返回一个比较日期,而不是一个年份整数。

© www.soinside.com 2019 - 2024. All rights reserved.