表
id date-of-birth
001 01/01/2011 'dd/mm/yyyy'
002 05/01/2012
003 15/05/2009
....
从上表中,我想计算从加入日期列开始的天数,出生日期应该从当前年份进行验证。
查找日期差异查询
Select id, DATEDIFF(dd,Convert(datetime, date-of-join, 103),getdate())
以上查询是从加入日期开始的,但我想验证这样的加入日期......
例如
id date-of-birth no-of-days
001 01/01/2011 64
002 05/01/2012 60
003 15/05/2009 295
...
条件
For 001, date-of-birth is '01/01/2011', so one year exceeded, then it should give no-0f-days from '01/01/2012'
For 002, date-of-birth is '05/01/2012, so it is not exceeded one years, then it should give no-of-days from '05/01/2012'
For 003, date-of-birth is '15/05/2009', so it is exceeded more than a years, then it should calculate from 15/05/2011 to current date
任何人都可以提供一些想法或查询帮助
答案 0 :(得分:1)
尝试:
select id,
[date-of-birth],
datediff(yy,[date-of-birth],getdate()) -
case when dateadd(yy,datediff(yy,[date-of-birth],getdate()),[date-of-birth])>getdate()
then 1 else 0 end as [no-of-years],
datediff(d,
dateadd(yy,datediff(yy,[date-of-birth],getdate()) -
case when dateadd(yy,datediff(yy,[date-of-birth],getdate()),[date-of-birth])>getdate()
then 1 else 0 end,[date-of-birth]),
getdate()) as [no-of-days]
from ...
答案 1 :(得分:0)
declare @T table (id int identity(100,1), date datetime)
insert @T values('2012-05-01')
insert @T values('2012-03-1')
insert @T values('2011-01-01')
insert @T values('2009-05-15')
insert @T values('2008-01-23')
select
id,
date,
Days = case when datediff(dd,date,getdate())>730
then datediff(dd,date,getdate()) - (datediff(dd,date,getdate())/365 * 365)
when datediff(dd,date,getdate())>365
then datediff(dd,convert(datetime, datename(yy,getdate()) + '/01/01'),getdate())
else abs(datediff(dd,date,getdate()))
end
from @T