我有一个带日期的表,在同一个表中我也有文本条目。例如:
2014-11-02
2014-11-01
Not done
2014-10-05
Not done
Not done
如果我运行SELECT * FROM表ORDER BY日期,那么我得到
2014-10-05
2014-11-01
2014-11-02
Not done
Not done
Not done
这是完美的。但是当我使用desc反转这个查询时,我得到:
Not done
Not done
Not done
2014-11-02
2014-11-01
2014-10-05
我想要的是“未完成”总是在底部。如果有人得到线索:)
答案 0 :(得分:0)
以下是您想要的简单方法:
order by (left(dates, 4) + 0 > 0) desc,
dates
它将前四位数字转换为数字。如果该数字大于零,则假定它是一年并将这些行放在第一位。这不会检查完整形成的日期,但它可能足以满足您的目的。
答案 1 :(得分:0)
尝试使用:
SELECT * FROM table ORDER BY FIELD(dates,'Not done') ASC, dates ASC
在您的评论之后:
SELECT dates, dateadded, (dates='Not yet') AS test, IF(test, cast(`dateadded` AS char), cast(`dates` AS char)) AS testsort FROM table ORDER BY test ASC, testsort ASC