你的位置:首页 > 数据库

[数据库]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       --而它们与当前日期@Now呈现这样的数列:             -0, -1, -0,  -1, -0, -1 .....    --如果当前是下半年,那么就是从2开始的,最近的N个年度是这样的: 2015 2015 2014 2014 2013 2013 2012       --而它们与当前日期@Now呈现这样的数列:             -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