....   也就是计算开始时间和结束时间之间的年度,
declare @s datetime, @e datetime
select @s='2008-3-31', @e='2008-7-1'select 开始时间=@s,结束时间=@e
    ,季度数=datepart(qq, @e)-datepart(qq,@s)+1 + datediff(year, @s,@e)*4
   
如果@s  2008-3-31 的时间小于20 也就是一个季度 也就是90-(1月,2月,3月31的时间 如果小于20 则@s 的时间不算一个季度

解决方案 »

  1.   

    在bb的时间也需要一样去判断 90-(10月份天数+11月份天数+12月份的12天)=17 那么结果就是bb的时间也不在 
    第四季度里面  如果结果大于20 则这个季度存在
    这个好像不对吧?
      

  2.   


    declare @s datetime, @e datetime 
    select @s='2008-3-31' --开始日期,1季度不足20天
    , @e='2008-7-1' --结束日期,3季度不足20天select @s=@s+20 --开始日期向后推20天
    , @e=@e-20 --结束日期向前移20天select 开始时间=@s,结束时间=@e 
        ,季度数=datepart(qq, @e)-datepart(qq,@s)+1 + datediff(year, @s,@e)*4 
    /*
    开始时间                    结束时间                    季度数
    ----------------------- ----------------------- -----------
    2008-04-20 00:00:00.000 2008-06-11 00:00:00.000 1(1 行受影响)
    */
      

  3.   

    create table tab(pid int,aa datetime,bb datetime) 
    insert tab select 1, '2008-01-20' ,'2008-12-12'
    union all select 2,  '2008-03-20' ,'2008-10-12'
    union all select 3,  '2008-10-20' ,'2009-3-12'select *
    , [季度数]=datepart(qq, bb-20)-datepart(qq,aa+20)+1 + datediff(year, aa+20,bb-20)*4 
    from tab
    /*
    pid         aa                      bb                      季度数
    ----------- ----------------------- ----------------------- -----------
    1           2008-01-20 00:00:00.000 2008-12-12 00:00:00.000 4
    2           2008-03-20 00:00:00.000 2008-10-12 00:00:00.000 2
    3           2008-10-20 00:00:00.000 2009-03-12 00:00:00.000 2(3 行受影响)*/drop table tab
      

  4.   

    季度的第一天
    SELECT CONVERT(datetime,
        CONVERT(char(8),
            DATEADD(Month,
                DATEPART(Quarter,@dt)*3-Month(@dt)-2,
                @dt),
            120)+'1')
      

  5.   

    貌似还是错误的  测试的结果应该是 季度数=3,2,2 不应该是4,2,2
    第一条数据的开始时间>20所以有第一季度  但结束时间=18<20{(90-10月份-11月份-12)=18} 所以不应该有第四季度