日期:2014-05-17  浏览次数:20503 次

一个排序的问题,等于今天日期的排上面,大于今天的排中间,小于今天的排下面
表明:Table1
字段名:Ftime,FNAME

数据:
2013年6月18日 张三 
2013年6月19日 丙六 
2013年6月15日 赵四 
2013年6月20日 王五 
2013年6月18日 李四



假如今天是2013年6月18日,那么结果我要:

2013年6月18日 张三
2013年6月18日 李四
2013年6月19日 丙六
2013年6月20日 王五
2013年6月15日 赵四

------解决方案--------------------
在0和1 后面少了个WHEN ,可以改成下面的。
select * from #tb
order by case when convert(varchar(10),convert(datetime ,substring(Ftime,1,4)+'-'+substring(Ftime,6,1)+'-'+substring(Ftime,8,2)),120)=convert(varchar(10),getdate(),120) then 0 
WHEN convert(varchar(10),convert(datetime ,substring(Ftime,1,4)+'-'+substring(Ftime,6,1)+'-'+substring(Ftime,8,2)),120)>convert(varchar(10),getdate(),120) then 1 
WHEN convert(varchar(10),convert(datetime ,substring(Ftime,1,4)+'-'+substring(Ftime,6,1)+'-'+substring(Ftime,8,2)),120)<convert(varchar(10),getdate(),120) then 2 else 3 end,Ftime

------解决方案--------------------
select * from tb
order by case when convert(varchar(10),Ftime,120)=convert(varchar(10),getdate(),120) then 0 
when convert(varchar(10),Ftime,120)>convert(varchar(10),getdate(),120) then 1 
when convert(varchar(10),Ftime,120)<convert(varchar(10),getdate(),120) then 2 
else 3 end,Ftime