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

解决方案 »

  1.   

    CASE WHEN DATEDIFF(时间,截止日期)>0 then 1 else 0 end 
      

  2.   


    --写反了
    CASE WHEN DATEDIFF(截止日期,时间)>0 then 1 else 0 end 
      

  3.   

    --> 测试数据:[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
    */
      

  4.   

    mysql  你换一下对应两个系统函数 DATEDIFF  GETDATE
      

  5.   

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

  6.   

    好吧 爱姐 你赢了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*/