用一个笨办法:
Select datediff(day,a,b) from (
Select '2003-01-01' as a,'2003-03-31' as b
Union all
Select '2003-04-01','2003-06-30'
union all
Select '2003-07-01','2003-09-30'
union all
Select '2003-10-01','2003-12-31'
) tmp where '2003-07-01' between a and b

解决方案 »

  1.   

    谢谢!
    再等等,看还有没有更好点的办法
    下面的帖子也麻烦大家关注:
    http://expert.csdn.net/Expert/topic/2285/2285336.xml?temp=.8841669
      

  2.   

    declare @d datetime
    set @d='2001-7-1'select datediff(day
    ,dateadd(month,-(month(@d)-1)%3,@d)-day(@d)
    ,dateadd(month,3-(month(@d)-1)%3,@d)-day(@d))
      

  3.   

    declare @aaa datetime
    declare @bbb datetime
    declare @ccc int
    set @aaa=convert(varchar(50),year('2001-7-1'))+'-'+ convert(varchar(50),( month('2001-7-1')-month('2001-7-1')%3 +1))+'-1'
    set @bbb=convert(varchar(50),year('2001-7-1'))+'-'+ convert(varchar(50),( month('2001-7-1')-month('2001-7-1')%3 +4))+'-1'
     set @ccc=DATEDIFF(day,@aaa,@bbb)
    select @ccc
      

  4.   

    zjcxc(邹建)对2000-2份的就不行了
    年没转化。。
      

  5.   

    我有一个超级笨的方法。
    declare @aaa datetime
    declare @int_z integer
    declare @rn integer
    declare @mouth_int integer
    select @mouth_Int=mouth(@aaa)
    set @int_z=@mouth_Int/3
    if rnpd(@mouth_Int)
      set @rn=0
     else
      set @rn=1
    if @int_z=0 and @rn=1 
       print '第一季度90天'
    if @int_z=0 and @rn=0
       print '第一季度91天'
    if @int_z=1 
       print '第二季度91天'
    if @int_z=2 
       print '第三季度92天'
    if @int_z=3 or @int_4
       print '第四季度92天'
      

  6.   

    要把年带上去,,
    declare @aaa datetime
    declare @bbb datetime
    declare @ccc int
    set @aaa=convert(varchar(50),year('2001-7-1'))+'-'+ convert(varchar(50),( month('2001-7-1')-month('2001-7-1')%3 +1))+'-1'
    set @bbb=convert(varchar(50),year('2001-7-1'))+'-'+ convert(varchar(50),( month('2001-7-1')-month('2001-7-1')%3 +4))+'-1'
     set @ccc=DATEDIFF(day,@aaa,@bbb)
    select @ccc
      

  7.   

    to: bitfubin(剑冷箫寒)楼主要求是根据日期求出季度天数,所以根本不用考虑200-2,它不是一个日期
      

  8.   

    declare @d varchar(100)
    set @d='2001-7'select @d=@d+'-1' where len(@d)<8
    select datediff(day,dateadd(month,-(month(@d)-1)%3,@d)-day(@d),dateadd(month,3-(month(@d)-1)%3,@d)-day(@d))
      

  9.   

    我加一个,教科书上的标准方法:select case datepart(quarter,@t) when 1 then 
    (case when (year(@t)%4=0 and year(@t)%100<>0) or year(@t)%400=0 then 91 else 90 end)
                            when 2 then 91
                            when 3 then 92
                            when 4 then 92
           end
      

  10.   


    declare @n smalldatetime,@m int
    select @n='2003-2-1'
    select @m=month(@n)
    select @n=datename(year,@n)+'-'+convert(varchar(2),(case when @m between 1 and 3 then 1 
                                   when @m between 4 and 6 then 4
                                   when @m between 7 and 9 then 7
                                   when @m between 10 and 12 then 10
                                   end))+'-01'
    select datediff(day,@n,dateadd(mm,3,@n))
      

  11.   


    declare @n smalldatetime,@m int,@mm varchar(10)
    select @n='2003-2-1'
     /*先求月份数*/
    select @m=month(@n)
    /*再求该季度第一个月的月份,年+月+日*/ 
    select @mm=convert(varchar(2),(case when @m between 1 and 3 then 1 
                                   when @m between 4 and 6 then 4
                                   when @m between 7 and 9 then 7
                                   when @m between 10 and 12 then 10
                                   end))
    select @n=datename(year,@n)+'-'+@mm+'-01'
    /*3个月为一季度*/
    select datediff(day,@n,dateadd(mm,3,@n))