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 
  • 相关阅读:
    ExtJs多级联动菜单的一种实现
    初学jquery之自学笔记(2)
    微软MVP评Silverlight的功能特性和价值
    利用XMLFormView在Web部件页中或者自定义页面中嵌入Infopath表单
    初学jquery之自学笔记(3)
    我想大声告诉你
    HTC G7 金卡 制作
    黑苹果配置
    我的Android 从 2.3开始! 开发环境搭建
    新台式机配置表
  • 原文地址:https://www.cnblogs.com/McJeremy/p/5073609.html
Copyright © 2011-2022 走看看