公司账期是每月18日到次月17日, 想要取前3个月的账期开始日期和结束日期,求下段代码的优化写法DECLARE @Year CHAR(4) ,
    @LastYear CHAR(4) , --上一月 年
    @Month CHAR(2) ,
    @dBegMonth1 CHAR(2) , --上一月开始 月
    @dEndMonth1 CHAR(2) , --上一月结束  月
    @dBegMonth2 CHAR(2) , --上一月开始 月
    @dEndMonth2 CHAR(2) , --上一月结束  月
    @dBegMonth3 CHAR(2) , --上一月开始 月
    @dEndMonth3 CHAR(2) , --上一月结束  月
    @Day CHAR(2) ,
    @上一月初 CHAR(10) ,
    @上一月末 CHAR(10) ,
    @上二月初 NVARCHAR(10) ,
    @上二月末 NVARCHAR(10) ,
    @上三月初 NVARCHAR(10) ,
    @上三月末 NVARCHAR(10);
SET @Year = YEAR(GETDATE());    
SET @Month = MONTH(GETDATE());
SET @Day = DAY(GETDATE());
SET @LastYear = @Year - 1;
  --  SET @gDate=GETDATE()
      
SET @Year = 2018;
SET @Month = 1;
SET @Day = 19;
IF @Day < 18
    BEGIN
        IF @Month >= 5
            BEGIN
                SET @dBegMonth1 = @Month - 2;
                SET @dEndMonth1 = @Month - 1;
                SET @dBegMonth2 = @Month - 3;
                SET @dEndMonth2 = @Month - 2;
                SET @dBegMonth3 = @Month - 4;
                SET @dEndMonth3 = @Month - 3;
                SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @Year + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
            END;
         
        IF @Month = 4
            BEGIN 
                SET @dBegMonth1 = @Month - 2;
                SET @dEndMonth1 = @Month - 1;
                SET @dBegMonth2 = @Month - 3;
                SET @dEndMonth2 = @Month - 2;
                SET @dBegMonth3 = 12; 
                SET @dEndMonth3 = @Month - 3;
                SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
            END;
        IF @Month = 3
            BEGIN  
                SET @dBegMonth1 = @Month - 2;
                SET @dEndMonth1 = @Month - 1;
                SET @dBegMonth2 = 12;
                SET @dEndMonth2 = @Month - 2;
                SET @dBegMonth3 = 11;
               
                SET @dEndMonth3 = 12;
                SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
            END;
        IF @Month = 2
            BEGIN  
                SET @dBegMonth1 = 12;
                SET @dEndMonth1 = @Month - 1;
                SET @dBegMonth2 = 11;
                SET @dEndMonth2 = 12;
                SET @dBegMonth3 = 10;
               
                SET @dEndMonth3 = 11;
                SET @上一月初 = @LastYear + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @LastYear + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
            END;
        IF @Month = 1
            BEGIN  
                SET @dBegMonth1 = 11;
                SET @dEndMonth1 = 12;
                SET @dBegMonth2 = 10;
                SET @dEndMonth2 = 11;
                SET @dBegMonth3 = 9;
               
                SET @dEndMonth3 = 10;
                SET @上一月初 = @LastYear + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @LastYear + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @LastYear + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
            END; 
    END; 
ELSE
    BEGIN
        IF @Month >= 4
            BEGIN
                SET @dBegMonth1 = @Month - 1;
                SET @dEndMonth1 = @Month;
                SET @dBegMonth2 = @Month - 2;
                SET @dEndMonth2 = @Month - 1;
                SET @dBegMonth3 = @Month - 3;
                SET @dEndMonth3 = @Month - 2;
                SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @Year + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
            END;
        IF @Month = 3
            BEGIN
                SET @dBegMonth1 = @Month - 1;
                SET @dEndMonth1 = @Month;
                SET @dBegMonth2 = @Month - 2;
                SET @dEndMonth2 = @Month - 1;
                SET @dBegMonth3 = 12;
                SET @dEndMonth3 = @Month - 2;
                SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
            END;
        IF @Month = 2
            BEGIN
                SET @dBegMonth1 = @Month - 1;
                SET @dEndMonth1 = @Month;
                SET @dBegMonth2 = 12;
                SET @dEndMonth2 = @Month - 1;
                SET @dBegMonth3 = 11;
                SET @dEndMonth3 = 12;
                SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
            END;
        IF @Month = 1
            BEGIN  
                SET @dBegMonth1 = 12;
                SET @dEndMonth1 = @Month;
                SET @dBegMonth2 = 11;
                SET @dEndMonth2 = 12;
                SET @dBegMonth3 = 10;
               
                SET @dEndMonth3 = 11;
                SET @上一月初 = @LastYear + '-' + @dBegMonth1 + '-18';
                SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
                SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
                SET @上二月末 = @LastYear + '-' + @dEndMonth2 + '-17';
                SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
                SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
            END;
    END; 
SELECT  @上一月初 ,
        @上一月末 ,
        @上二月初 ,
        @上二月末 ,
        @上三月初 ,
        @上三月末;
    

解决方案 »

  1.   

    declare @year int,@month int,@day int
    set @year=2018
    set @month=5
    set @day=18
    declare @date datetime
    set @date=CAST(CAST(@year AS VARCHAR(20))+RIGHT('0'+CAST(@month AS VARCHAR(20)),2)+RIGHT('0'+CAST(@day AS VARCHAR(20)),2) AS DATETIME)
    --上月开始日期
    SELECT DATEADD(MONTH,-1,@date)
    --上月末
    SELECT @date-1
    --上二月初
    SELECT DATEADD(MONTH,-2,@date)
    --上二月末
    SELECT DATEADD(MONTH,-1,@date)-1
    --上三月初
    SELECT DATEADD(MONTH,-3,@date)
    --上三月末
    SELECT DATEADD(MONTH,-2,@date)-1
    多简单的事,学习一下dateadd等MSSQL函数用法
      

  2.   

    DECLARE @d DATETIME,@dBegin DATETIME,@dEnd DATETIME
    SET @d='2018-07-10'
    --得到指定时间的开始日期和结束日期
    SET @dBegin=CONVERT(CHAR(7),@d,120)+'-18'
    SET @dEnd=CONVERT(CHAR(7), DATEADD(MONTH ,1,@dBegin),120)+'-17'
    SELECT 
        @dBegin AS [本月账期开始]
    ,@dEnd AS [本月账期结束]
    ,DATEADD(MONTH , -1, @dBegin) AS [前1个月账期开始]
    ,DATEADD(MONTH , -1, @dEnd) AS [前1个月账期结束]
    ,DATEADD(MONTH , -2, @dBegin) AS [前2个月账期开始]
    ,DATEADD(MONTH , -2, @dEnd) AS [前2个月账期结束]
    ,DATEADD(MONTH , -3, @dBegin) AS [前3个月账期开始]
    ,DATEADD(MONTH , -3, @dEnd) AS [前3个月账期结束]
      

  3.   

    declare @year int,@month int,@day int
    set @year=2018
    set @month=5
    set @day=18
    declare @date datetime
    set @date=CAST(CAST(@year AS VARCHAR(20))+RIGHT('0'+CAST(@month AS VARCHAR(20)),2)+RIGHT('0'+CAST(@day AS VARCHAR(20)),2) AS DATETIME)
    --上月开始日期
    SELECT DATEADD(MONTH,-1,@date)
    --上月末
    SELECT @date-1
    --上二月初
    SELECT DATEADD(MONTH,-2,@date)
    --上二月末
    SELECT DATEADD(MONTH,-1,@date)-1
    --上三月初
    SELECT DATEADD(MONTH,-3,@date)
    --上三月末
    SELECT DATEADD(MONTH,-2,@date)-1
    多简单的事,学习一下dateadd等MSSQL函数用法