SELECT CASE WHEN DATEDIFF(day,'2001/04/21','2002/04/20') <365 then 0 else DATEDIFF(year,'2001/04/21','2002/04/20') end
SELECT CASE WHEN DATEDIFF(day,'2001/04/21','2002/04/20') <365 then 0 else DATEDIFF(year,'2001/04/21','2002/04/20') end
declare @dat datetime set @dat='01-4-30' select case left(cast((datediff(yy,@dat,getdate())) as varchar(4)),1) when '0' then (case left(cast(datediff(dd,@dat,getdate()) as varchar(4)),1) when '-' then 0 else 1 end) when '-' then abs(datediff(yy,@dat,getdate())) else datediff(yy,@dat,getdate()) end
你的意思是大于现在时间的都为0是吧,那when '-',的时候还让它是0就行了
假定只有一种情况才会让结果等于1 SELECT DATEDIFF(year,'2001/04/21','2002/04/20') ---------------- 结果为1 我想为1 declare @dat datetime set @dat='2001-4-30' select case when dateadd(day,-1,dateadd(year,@dat,Datediff(year,@date,Getdate()))=convert(varchar(10),getdate(),21) then 1 else 0 end 如果是求满足条件的相隔年份 declare @dat datetime set @dat='2001-4-30' select case when dateadd(day,-1,dateadd(year,@dat,Datediff(year,@date,Getdate()))=convert(varchar(10),getdate(),21) then Datediff(year,@date,Getdate()) else 0 end
假定你要的结果是SELECT DATEDIFF(year,'2001/04/21','2002/04/20') ---------------- 结果为1 我想为1 SELECT DATEDIFF(year,'2000/04/21','2002/04/20') ---------------- 结果为2 我想为1 declare @dat datetime set @dat='2001-4-30' select case when dateadd(day,-1,dateadd(year,Datediff(year,@dat,Getdate()),@dat)) =convert(varchar(10),getdate(),21) then 1 else 0 end 假定 SELECT DATEDIFF(year,'2000/04/21','2002/04/20') ---------------- 结果为2 我想为2 SELECT DATEDIFF(year,'2001/04/20','2002/04/20') ---------------- 结果为1 我想为0 SELECT DATEDIFF(year,'2000/04/20','2002/04/21') ---------------- 结果为2 我想为0declare @dat datetime set @dat='2001-4-30' select case when dateadd(day,-1,dateadd(year,Datediff(year,@dat,Getdate()),@dat)) =convert(varchar(10),getdate(),21) then Datediff(year,@dat,Getdate()) else 0 end
这个不能得到我预期的效果
---------------- 结果为1 SELECT DATEDIFF(year,'2001/04/29','2002/04/20')
---------------- 结果为1 我想为0
SELECT DATEDIFF(year,'2001/04/21','2002/04/20')
---------------- 结果为1 我想为1
SELECT DATEDIFF(year,'2001/12/29','2002/04/20')
---------------- 结果为1 我想为0
set @dat='01-4-30'
select case left(cast((datediff(yy,@dat,getdate())) as varchar(4)),1)
when '0' then (case left(cast(datediff(dd,@dat,getdate()) as varchar(4)),1) when '-'
then 0 else 1 end)
when '-' then abs(datediff(yy,@dat,getdate()))
else datediff(yy,@dat,getdate())
end
SELECT DATEDIFF(year,'2001/04/21','2002/04/20')
---------------- 结果为1 我想为1
declare @dat datetime
set @dat='2001-4-30'
select case when
dateadd(day,-1,dateadd(year,@dat,Datediff(year,@date,Getdate()))=convert(varchar(10),getdate(),21) then 1 else 0 end
如果是求满足条件的相隔年份
declare @dat datetime
set @dat='2001-4-30'
select case when
dateadd(day,-1,dateadd(year,@dat,Datediff(year,@date,Getdate()))=convert(varchar(10),getdate(),21) then Datediff(year,@date,Getdate()) else 0 end
---------------- 结果为1 我想为1
SELECT DATEDIFF(year,'2000/04/21','2002/04/20')
---------------- 结果为2 我想为1
declare @dat datetime
set @dat='2001-4-30'
select case when
dateadd(day,-1,dateadd(year,Datediff(year,@dat,Getdate()),@dat))
=convert(varchar(10),getdate(),21) then 1 else 0 end
假定
SELECT DATEDIFF(year,'2000/04/21','2002/04/20')
---------------- 结果为2 我想为2
SELECT DATEDIFF(year,'2001/04/20','2002/04/20')
---------------- 结果为1 我想为0
SELECT DATEDIFF(year,'2000/04/20','2002/04/21')
---------------- 结果为2 我想为0declare @dat datetime
set @dat='2001-4-30'
select case when
dateadd(day,-1,dateadd(year,Datediff(year,@dat,Getdate()),@dat))
=convert(varchar(10),getdate(),21) then Datediff(year,@dat,Getdate()) else 0 end
http://www.csdn.net/expert/topic/672/672817.xml?temp=.9215509