create table member
(
birthday datetime
)
insert member
select '1984-12-19'
union select '1994-12-25'
union select '1964-12-18'
union select '1984-05-12'
union select '1984-06-06'
union select '1954-10-12'
union select '1994-01-25'
union select '1958-09-22'
select * from member
order by
case when datediff(d,getdate(),convert(datetime,stuff(convert(varchar,birthday,120),1,4,'2003'),120))>=0 then
datediff(d,getdate(),convert(datetime,stuff(convert(varchar,birthday,120),1,4,'2003'),120))-1000
else
datediff(d,getdate(),convert(datetime,stuff(convert(varchar,birthday,120),1,4,'2003'),120))
end
select * from table1 order by (case when (datepart("dy",ddate)-datepart("dy",getdate()))>=0 then datepart("dy",ddate) else datepart("dy",cast(cast(datepart("yyyy",getdate()) as char(4))+'/'+'12/31' as smalldatetime))+datepart("dy",ddate) end )
select * from (
select *,datediff(day,rtrim(year(getdate()))+right(CONVERT(char(10),birthday,120),6),getdate()) tem from
Member) aa order by case when tem>0 then 1 else 0 end ,tem desc
select * from table1 order by (case when (datepart("dy",ddate)-datepart("dy",getdate()))>0 then datepart("dy",ddate) else datepart("dy",cast(cast(datepart("yyyy",getdate()) as char(4))+'/'+'12/31' as smalldatetime))+datepart("dy",ddate) end )
select rq from
(select '2000-12-04' rq
union select '2001-01-02'
union select '2000-09-01'
union select '2003-02-05') a
order by replace(rq,'-','') desc
declare @t table(id int identity(1,1),出生日期 datetime)
insert into @t(出生日期)
select '1985-11-23'
union all select '1977-11-24'
union all select '1978-11-25'
union all select '1979-11-26'
union all select '1987-11-27'
union all select '1999-11-28'
union all select '1999-11-29'
union all select '1999-11-30'
select * from(
select *,序号=datediff(day,getdate(),dateadd(year,year(getdate())-year(出生日期),出生日期))
from @t) a
order by case when 序号=0 then 3 when 序号>0 then 1 when 序号<1 then 2 end,序号