MySql关于排序的问题,急 啊!求高手解决
目的是想根据时间字段来排序,但是要判断这个时间字段的范围,如果这个时间字段在今天之前,就按照倒序排序
如果时间在今天以后,就用这个时间的正序排序。
其实要实现的功能是这样的:有个字段叫报名截止日期,在页面上要显示还有几天要截止报名了,如果已经截止了就按照截止时间的倒序排序。如果还未截止,离今天最近的日期要排在最前面。
[解决办法]
--> 测试数据:[tb]IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]GO CREATE TABLE [tb]([date] DATETIME)INSERT [tb]SELECT '2012-10-14' UNION ALLSELECT '2012-10-12' UNION ALLSELECT '2012-10-13' UNION ALLSELECT '2012-10-11' UNION ALLSELECT '2012-10-9' UNION ALLSELECT '2012-10-8' UNION ALLSELECT '2012-10-5' UNION ALLSELECT '2012-10-3' UNION ALLSELECT '2012-10-4' UNION ALLSELECT '2012-10-1'--------------开始查询--------------------------SELECT [date] FROM [tb] ORDER BY CASE WHEN DATEDIFF(dd,GETDATE(),[date])>=0 THEN 0 ELSE 1 END ,DATEDIFF(dd,GETDATE(),[date]) ----------------结果----------------------------/* date2012-10-11 00:00:00.0002012-10-12 00:00:00.0002012-10-13 00:00:00.0002012-10-14 00:00:00.0002012-10-01 00:00:00.0002012-10-03 00:00:00.0002012-10-04 00:00:00.0002012-10-05 00:00:00.0002012-10-08 00:00:00.0002012-10-09 00:00:00.000*/
[解决办法]
好吧 爱姐 你赢了drop table if exists test1;CREATE TABLE TEST1(ID INT,ENDTIME DATETIME);INSERT INTO TEST1 VALUES(1,'2012-10-07');INSERT INTO TEST1 VALUES(2,'2012-10-08');INSERT INTO TEST1 VALUES(3,'2012-10-09');INSERT INTO TEST1 VALUES(4,'2012-10-06');INSERT INTO TEST1 VALUES(5,'2012-10-12');INSERT INTO TEST1 VALUES(6,'2012-10-13');SELECT * FROM test1 ORDER BY CASE WHEN DATEDIFF(ENDTIME,now())>0 then 0 else 1 end ,endtime;/*5 2012-10-12 00:00:006 2012-10-13 00:00:004 2012-10-06 00:00:001 2012-10-07 00:00:002 2012-10-08 00:00:003 2012-10-09 00:00:00*/