当前位置: 代码迷 >> SQL >> SQL中获取日前的N个半年度
  详细解决方案

SQL中获取日前的N个半年度

热度:85   发布时间:2016-05-05 09:45:01.0
SQL中获取最近的N个半年度

直接上代码:

--获取往前推的N个半年度CREATE FUNCTION F3_GetRecentNHalfYear(    @N INT)RETURNS @Result TABLE (    Year SMALLINT,    HalfYear TINYINT,    DateName VARCHAR(200))AS BEGIN     IF @N <1     BEGIN         RETURN    END     DECLARE @Now DATETIME,            @StartHalfYear TINYINT,        --从上半年还是下半年开始            @I INT     SET @Now = GETDATE()    SET @I = 1     IF(MONTH(@Now)<=6)         SET @StartHalfYear = 1     ELSE        SET @StartHalfYear = 2      WHILE @I <= @N    BEGIN                 --如果当前是上半年,那么就是从1开始的,最近的N个年度是这样的:  2015 2014 2014 2013 2013 2012             --[email protected]:                          -0, -1,  -0,   -1,  -0,  -1 .....        --如果当前是下半年,那么就是从2开始的,最近的N个年度是这样的: 2015 2015 2014 2014 2013 2013 2012             --[email protected]:                          -0, -0,  -1,   -0,  -1,  -0,.....        IF @StartHalfYear = 2        BEGIN            IF @I >2 AND @I % 2 != 0             BEGIN                 SET @Now = DATEADD(yyyy,-1,@Now)            END         END        ELSE          BEGIN             IF  @I % 2 = 0             BEGIN                 SET @Now = DATEADD(yyyy,-1,@Now)            END         END                 --如果当前是上半年,那么就是从1开始的,最近的N个半年度呈现这样的数列: 1 2 1 2 1 2 1 2         --如果当前是下半年,那么就是从2开始的,最近的N个半年度呈现这样的数列: 2 1 2 1 2 1 2 1         --那么通项公式分别是:(3+POWER(-1,@I))/2  和 (3+POWER(-1,@I+1))/2         INSERT INTO @Result        (Year,HalfYear)        SELECT             YEAR(@Now),(3+POWER(-1,@I+(@StartHalfYear-1)))/2         SET @I = @I + 1     END     UPDATE @Result     SET DateName = CAST(Year AS VARCHAR(4))+'' + (        CASE WHEN HalfYear=1 THEN '上半年' ELSE '下半年' END     )RETURN END 

 

  相关解决方案