zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    P4165 [SCOI2007]组队
    CF575B
    SG函数胡乱一气
    CF280C Game on Tree
    AGC010F
    CF140E
    多功能的低功耗蓝牙可穿戴设备用于监测血液酒精浓度
    智能手环幕后的英雄
    图像处理实用资源
    15.12DataGridView分页显示
  • 原文地址:https://www.cnblogs.com/McJeremy/p/5073609.html
Copyright © 2011-2022 走看看