2012-06-19 219 views

回答

9

试试这个::

select * from table order by TIMEDIFF(to, from) 
2
SELECT ... 
FROM ... 
ORDER BY DATEDIFF(endDate, starDate); 

[编辑] 上述查询的时间差(该开始和结束时间的列之间的时间段)中的所有条目,以便它们与日期一起使用。正如康德Sashi指出,它会忽略时间你DATETIME

一部分。另一方面,如果差是TIME范围(-838:59:59838:59:59)之外TIMEDIFF失败。

一个完整的解决方案是:

SELECT ... 
FROM ... 
ORDER BY 
    DATEDIFF(endDate, starDate), 
    TIMEDIFF(TIME(endDate), TIME(starDate)); 

大概进行了苦头,但...如果需要这样的精确度,如果这两个日期之间的差异可能是TIME范围之外,那么每分裂DATETIME列分成两个DATETIME列肯定会表现更好,假设您将在四个结果列的每一列上应用一个索引。

+1

它只显示日期的差异,大约有往返于当天 –

+1

@SashiKant正确的条目内容,TIMEDIFF()在这种情况下更合适。 – RandomSeed

0
SELECT something FROM table ORDER BY TIMEDIFF(end_date, start_date); 
0

mysql定义函数来计算像TIME_TO_SECTIMEDIFF 2个timestamp S,之间的差异。

SELECT TIME_TO_SEC(TIMEDIFF(from_time, to_time)) diff from your_table order by diff;