用一个笨办法:
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
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
再等等,看还有没有更好点的办法
下面的帖子也麻烦大家关注:
http://expert.csdn.net/Expert/topic/2285/2285336.xml?temp=.8841669
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))
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
年没转化。。
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天'
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
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))
(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
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))
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))