Сортировка по дате

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

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

Обсуждение
Многие сведения включают в себя информацию о дате или времени, и нередко требуется упорядочить результаты в хронологическом порядке. MySQL умеет упорядочивать временные типы, так что не приходится прибегать к каким-то ухищрениям, чтобы отсортировать значения столбцов DATE, DATETIME, TIME или TIMESTAMP. Пусть некоторая таблица содержит столбцы всех этих типов:

mysql> SELECT * FROM temporal_val;


+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
+--------------+--------------------------+------------+---------------------+

Используем инструкцию ORDER BY для упорядочивания каждого из столбцов в нужном направлении:

mysql> SELECT * FROM temporal_val ORDER BY d;


+--------------+---------------------------+-----------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
+--------------+--------------------------+------------+---------------------+

mysql> SELECT * FROM temporal_val ORDER BY dt;


+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
+--------------+--------------------------+------------+---------------------+

mysql> SELECT * FROM temporal_val ORDER BY t;


+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
+--------------+--------------------------+------------+---------------------+

mysql> SELECT * FROM temporal_val ORDER BY ts;


+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
+--------------+--------------------------+------------+---------------------+

Иногда сортировка использует только часть даты или времени. В этом случае можно выделить необходимую составляющую (или составляющие) и работать только с ними.
Теги:
Сортировка
Добавлено: 22 Июля 2018 21:44:34 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...