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

MySql关于排序的问题,急 啊!求高手解决
目的是想根据时间字段来排序,但是要判断这个时间字段的范围,如果这个时间字段在今天之前,就按照倒序排序
如果时间在今天以后,就用这个时间的正序排序。
其实要实现的功能是这样的:有个字段叫报名截止日期,在页面上要显示还有几天要截止报名了,如果已经截止了就按照截止时间的倒序排序。如果还未截止,离今天最近的日期要排在最前面。


------解决方案--------------------
SQL code
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO 
CREATE TABLE [tb]([date] DATETIME)
INSERT [tb]
SELECT '2012-10-14' UNION ALL
SELECT '2012-10-12' UNION ALL
SELECT '2012-10-13' UNION ALL
SELECT '2012-10-11' UNION ALL
SELECT '2012-10-9' UNION ALL
SELECT '2012-10-8' UNION ALL
SELECT '2012-10-5' UNION ALL
SELECT '2012-10-3' UNION ALL
SELECT '2012-10-4' UNION ALL
SELECT '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])  
----------------结果----------------------------
/* 
date
2012-10-11 00:00:00.000
2012-10-12 00:00:00.000
2012-10-13 00:00:00.000
2012-10-14 00:00:00.000
2012-10-01 00:00:00.000
2012-10-03 00:00:00.000
2012-10-04 00:00:00.000
2012-10-05 00:00:00.000
2012-10-08 00:00:00.000
2012-10-09 00:00:00.000
*/

------解决方案--------------------
SQL code
好吧 爱姐 你赢了

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:00
6    2012-10-13 00:00:00
4    2012-10-06 00:00:00
1    2012-10-07 00:00:00
2    2012-10-08 00:00:00
3    2012-10-09 00:00:00

*/