TSQL 根据日期在 select 语句中包含会计年度

TSQL Including fiscal year in select statement based on the date

我需要根据今天的日期在我的 select 报表中包含财政年度,例如 12/30/2016 2016-2017。会计年度从 7 月 1 日开始。截至 2017 年 7 月 1 日,它应该计算 2017-2018。我怎样才能做到这一点?

ClaimNo
20161030
20161124
20160815
20170115
20180101

SELECT * 
FROM TABLE
WHERE ClaimNo LIKE '2016%' OR ClaimNo LIKE '2017%';
DECLARE @ThisYear VARCHAR(50)
DECLARE @NextYear VARCHAR(50)
SET @ThisYear = CAST(DATEPART(YYYY,GETDATE()) as varchar(20)) +'0731'  --print @ThisYear
SET @NextYear = CAST(DATEPART(YYYY,DATEADD(YYYY,1,GETDATE()))as varchar(20))+'1231' --print @Nextyear


SELECT * FROM TABLE WHERE CAST(ClaimNo AS DATE) BETWEEN @ThisYear and @NextYear
SELECT ClaimNo,
    CASE WHEN MONTH(CONVERT(DATE,ClaimNo)) <7 THEN YEAR(CONVERT(DATE,ClaimNo))
        ELSE YEAR(CONVERT(DATE,ClaimNo)) + 1 END AS FiscalYear
FROM
    <<Table>>;

测试代码

DECLARE @tab TABLE (ClaimNo CHAR(20));

INSERT INTO @tab (ClaimNo)
VALUES
('20161030'),
('20161124'),
('20160815'),
('20170115'),
('20180101');

SELECT ClaimNo,
    CASE WHEN MONTH(CONVERT(DATE,ClaimNo)) <7 THEN YEAR(CONVERT(DATE,ClaimNo))
        ELSE YEAR(CONVERT(DATE,ClaimNo)) + 1 END AS FiscalYear
FROM
    @tab;

借助临时计数 table,我们可以轻松计算出财政年度。在这种情况下,我们从 1980 年开始,并持续 50 年。这两项都可以根据需要进行调整。

DECLARE @table TABLE (ClaimNo varchar(25));
INSERT INTO @table (ClaimNo)
VALUES
('20161030'),
('20161124'),
('20160815'),
('20170115'),
('20180101');


Select A.ClaimNo
      ,FiscalYear = Str(Year(D1),4)+' - '+Str(Year(D2),4)
 From  @table A
 Join (
        Select Top 50 D1=cast(DateAdd(YY,Row_Number() Over (Order By Number)-1,'1980-07-01') as Date) 
                     ,D2=cast(DateAdd(YY,Row_Number() Over (Order By Number),'1980-06-30') as Date) 
         From master..spt_values 
      ) D
    on ClaimNo Between D1 and D2

Returns

ClaimNo     FiscalYear
20161030    2016 - 2017
20161124    2016 - 2017
20160815    2016 - 2017
20170115    2016 - 2017
20180101    2017 - 2018

注意:如果 ClaimNo 是一个整数,只需将 ON 子句更改为

on cast(ClaimNo as varchar(8)) Between D1 and D2