分かりやすく、使いやすく。

年度を計算する方法、年度の開始月を計算する方法

スポンサーリンク

SQL Server 2008 R2 では年度を計算する関数は用意されていないため、以下のように計算します。

  1. 月が 1 ~ 3 の場合は、年から 1 差し引く。
  2. 上記以外の場合は年をそのまま使用する。

計算した年度に文字列 '04' を追加すれば、YYYYMM 形式の年度開始月を取得することができます。

  1. 年度を計算するサンプル SQL
  2. 年度の開始月を計算するサンプル SQL


年度を計算するサンプル SQL

tsql(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--テーブル変数(@MY_DATE)を宣言
DECLARE @MY_DATE TABLE(
  MY_DATETIME DATETIME  
);
 
-- テスト用の日付データーを挿入
INSERT INTO @MY_DATE VALUES
   --2015/01 ~ 2015/12
   ('2015/01/05'), ('2015/02/08'), ('2015/03/15'),
   ('2015/04/18'), ('2015/05/20'), ('2015/06/25'),
   ('2015/07/26'), ('2015/08/31'), ('2015/09/01'),
   ('2015/10/30'), ('2015/11/02'), ('2015/12/15');
 
-- 年度の計算 
SELECT
    MY_DATETIME
    --1月~3月であれば、年から1差し引く。
     --それ以外の場合は年をそのまま取得。
  , CASE WHEN MONTH(MY_DATETIME) <= 3 
              THEN YEAR(MY_DATETIME) - 1
              ELSE YEAR(MY_DATETIME)
    END
FROM 
  @MY_DATE  

年度の開始月を計算するサンプル SQL

年度の開始月は上記で計算した年度に 4 月を表す 04 を追加すれば計算できます。 但し、上記で計算した年度は数値なので、事前に CONVERT 関数で文字列に変換する必要があります。

実際のサンプルコードは以下の通りです。

tsql(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
--テーブル変数(@MY_DATE)を宣言
DECLARE @MY_DATE TABLE(
  MY_DATETIME DATETIME  
);
 
-- テスト用の日付データーを挿入
INSERT INTO @MY_DATE VALUES
   --2015/01 ~ 2015/12
   ('2015/01/05'), ('2015/02/08'), ('2015/03/15'),
   ('2015/04/18'), ('2015/05/20'), ('2015/06/25'),
   ('2015/07/26'), ('2015/08/31'), ('2015/09/01'),
   ('2015/10/30'), ('2015/11/02'), ('2015/12/15');
 
--年度の計算。1月~3月であれば、年から1差し引く。
--それ以外の場合は年をそのまま取得。
SELECT
    MY_DATETIME
    
    --年度の開始月を YYYYMM 形式の文字列で取得
  , CONVERT(VARCHAR,
      CASE WHEN MONTH(MY_DATETIME) <= 3 
                THEN YEAR(MY_DATETIME) - 1
                ELSE YEAR(MY_DATETIME)
      END
    )
    + '04'
FROM 
  @MY_DATE 
 
スポンサーリンク