• 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 
  • 相关阅读:
    PHP:判断客户端是否使用代理服务器及其匿名级别
    Ruby:Mechanize的使用教程
    Ruby:多线程队列(Queue)下载博客文章到本地
    Ruby:线程实现经典的生产者消费者问题
    Ruby:Open-uri和Net::HTTP的不同
    Ruby:Nokogiri
    Ruby:字符串处理函数
    Ruby:Net::HTTP
    10分钟打造强大的gvim
    命令行批量合并视频脚本
  • 原文地址:https://www.cnblogs.com/McJeremy/p/5073609.html
Copyright © 2020-2023  润新知