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

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

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

Обсуждение
Многие сведения включают в себя информацию о дате или времени, и нередко требуется упорядочить результаты в хронологическом порядке. 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 |
+--------------+--------------------------+------------+---------------------+

Иногда сортировка использует только часть даты или времени.


В этом случае можно выделить необходимую составляющую (или составляющие) и работать только с ними..



Оцените статью: (0 голосов)
0 5 0

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