2016-12-30 12 views
3

2016年12月30日の2016-2017など、今日の日付に基づくSELECTステートメントに会計年度を含める必要があります。会計年度は7月1日から開始されます.2017年7月現在、2017-2018年を計算する必要があります。どうすればそれを達成できますか?TSQL日付に基づく選択ステートメントに会計年度を含む

ClaimNo 
20161030 
20161124 
20160815 
20170115 
20180101 

SELECT * 
FROM TABLE 
WHERE ClaimNo LIKE '2016%' OR ClaimNo LIKE '2017%'; 
+0

にON句を変更するには、 'SELECT'、すなわち年度含めますか会計年度に別の列を作成するか、会計年度に返された行を制限します。 'どこのFiscalYear(ClaimNo)= 1066'ですか?ヒント:適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方でデータベースの質問にタグを付けると便利です。 'sql-server-2014'です。構文と機能の相違は、しばしば答えに影響します。 – HABO

答えて

1
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 
+0

タイプが間違っています。 '0731'を '0701'に置き換えてください。 – LONG

+0

ありがとう、これは私が探していたものです。 – Kaur

+0

私は助けることができる嬉しい:) – LONG

1
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; 
1

アドホック集計テーブルの助けを借りて、我々は簡単年度計算することができます。この場合、私たちは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 

戻り

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

注:ClaimNoがintである場合は、単に

on cast(ClaimNo as varchar(8)) Between D1 and D2 
関連する問題