MySQL / 6. Сортировка результатов запроса

Сортировка по времени дня

Задача
Вы хотите упорядочить записи по времени дня.

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

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

mysql> SELECT * FROM mail ORDER BY HOUR(t), MINUTE(t), SECOND(t);

+--------------------------+---------+---------+----------+---------+----------+
| t                                  | srcuser | srchost | dstuser | dsthost | size       |
+--------------------------+---------+---------+----------+---------+----------+
| 2001-05-15 07:17:48 | gene     | mars     | gene     | saturn  | 3824      |
| 2001-05-15 08:50:57 | phil        | venus   | phil       | venus   | 978        |
| 2001-05-16 09:00:28 | gene     | venus   | barb      | mars     | 613       |
| 2001-05-14 09:31:37 | gene     | venus   | barb      | mars     | 2291     |
| 2001-05-11 10:15:08 | barb      | saturn  | tricia      | mars     | 58274   |
| 2001-05-15 10:25:52 | gene      | mars    | tricia      | saturn  | 998532 |
| 2001-05-14 11:52:17 | phil        | mars     | tricia      | saturn  | 5781     |
| 2001-05-12 12:48:13 | tricia      | mars     | gene     | venus   | 194925 |
...

Вы также можете применить функцию TIME_TO_SEC() для отбрасывания составляющей даты и возврата составляющей времени, пересчитанной в секунды:mysql> SELECT * FROM mail ORDER BY TIME_TO_SEC(t);

+--------------------------+---------+---------+----------+---------+----------+
| t                                  | srcuser | srchost | dstuser | dsthost | size       |
+--------------------------+---------+---------+----------+---------+----------+
| 2001-05-15 07:17:48 | gene     | mars     | gene     | saturn  | 3824      |
| 2001-05-15 08:50:57 | phil        | venus   | phil       | venus   | 978        |
| 2001-05-16 09:00:28 | gene     | venus   | barb     | mars      | 613       |
| 2001-05-14 09:31:37 | gene     | venus   | barb     | mars      | 2291     |
| 2001-05-11 10:15:08 | barb      | saturn  | tricia     | mars      | 58274   |
| 2001-05-15 10:25:52 | gene     | mars     | tricia     | saturn   | 998532 |
| 2001-05-14 11:52:17 | phil        | mars     | tricia     | saturn   | 5781     |
| 2001-05-12 12:48:13 | tricia      | mars     | gene     | venus   | 194925 |
...

Статьи по MySQL на эту тему:

Размещение некоторых значений в начале или конце упорядоченного списка
Сортировка IP-адресов в числовом порядке
Сортировка в порядке, определенном пользователем
Сортировка значений ENUM
Сортировка имен хостов по доменам