select *,datediff(dd,birthday,getdate()) as 还有天数
order by datediff(dd,birthday,getdate()) asc

解决方案 »

  1.   

    select 用户,birthday,ABS(datediff(day,getdate(),'1900'+right(CONVERT(varchar(10),birthday,120),6))) '天数' from [table] order by 
    ABS(datediff(day,getdate(),'1900'+right(CONVERT(varchar(10),birthday,120),6)))
      

  2.   

    select 用户,birthday,ABS(datediff(day,getdate(),'1900'+right(CONVERT(varchar(10),birthday,120),6))) '天数' from [table] order by 
    ABS(datediff(day,getdate(),'1900'+right(CONVERT(varchar(10),birthday,120),6)))
      

  3.   

    select 用户,birthday,ABS(datediff(day,getdate(),'1900'+right(CONVERT(varchar(10),birthday,120),6))) '天数' from [table] order by 
    ABS(datediff(day,getdate(),'1900'+right(CONVERT(varchar(10),birthday,120),6)))
      

  4.   

    use northwind 
    go
    select  *,banlance_day = datepart(dd,birthday-getdate()) from  table_birthday
    order by  datepart(YYYY,(getdate()-birthday)),datepart(mm,(getdate()-birthday)),datepart(dd,(getdate()-birthday)) desc
      

  5.   


    select * from [table] order by 
    case 
    when convert(char(4),getdate(),120)+right(CONVERT(varchar(10),birthday,120),6)<CONVERT(varchar(10),getdate(),120)  --今年生日以过的人,就要计算到下一年的生日
    then abs(datediff(day,cast(year(getdate()+1 as varchar)+ right(CONVERT(varchar(10),birthday,120),6),getdate()))
    else convert(char(4),getdate(),120)+right(CONVERT(varchar(10),birthday,120),6)<CONVERT(varchar(10),getdate(),120)
    abs(datediff(day,cast(year(getdate() as varchar)+ right(CONVERT(varchar(10),birthday,120),6),getdate()))
    end要是碰到那个生的巧的2月29生日,那就有得烦了,还不如做个函数吧.:)