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
我需要根据今天的日期在我的 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