2012-06-19 3 views
3

У меня есть таблица, в которой есть два столбца datetime (один для времени начала и один для конечного времени).Порядок по дате Разница между двумя столбцами даты

мне нужно, чтобы иметь возможность выбрать все элементы и порядок их в зависимости от разницы во времени между этими двумя столбцами (период между начальным и конечным колоннах времени)

ответ

9

Попробуйте ::

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

[править] выше запроса работает с датами. Как отметил Кант Саши, он будет игнорировать раз, когда часть вашего DATETIME

С другой стороны, TIMEDIFF терпит неудачу, если разница находится за пределами диапазона TIME (-838:59:59 к 838:59:59).

Комплексное решение может быть:

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

Вероятно выполняет очень, хотя ... Если требуется такая точность, и если разница между двумя датами может быть за пределами TIME диапазона, то разделив каждый ваших столбцов DATETIME на две колонки DATE и TIME, безусловно, будут работать лучше, если вы примените один индекс для каждого из четырех результирующих столбцов.

+1

это только показывает разницу в дате, а как насчет того, чтобы данные и с тем же день –

+1

@SashiKant Correct, TimeDiff() более подходит в данном случае. – RandomSeed

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

Есть mysql определенные функции для вычисления разницы между двумя timestamp с, как TIME_TO_SEC и TIMEDIFF.

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

Смежные вопросы