Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да поръчам по дата в MySQL

Проблем:

Искате да сортирате редовете по дата.

Пример 1:

exam таблицата има две колони, subject и exam_date .

предмет дата_изпит
Математика 19.12.2019
английски 08.01.2020
Наука 2020-01-05
Здраве 2020-01-05
Изкуство NULL

Искате да сортирате редовете по exam_date .

Решение:

SELECT *
FROM exam
ORDER BY exam_date;

Резултатът изглежда така (редовете са сортирани във възходящ ред по exam_date ):

предмет дата_изпит
Изкуство NULL
Математика 19.12.2019
Наука 2020-01-05
Здраве 2020-01-05
английски 08.01.2020

Дискусия:

Използвайте ORDER BY ключова дума и името на колоната, по която искате да сортирате. По този начин ще сортирате данните във възходящ ред по тази колона. Можете също да използвате ASC ключова дума, за да стане ясно, че поръчката е възходяща (най-ранната дата се показва първа, най-новата дата се показва последна и т.н.).

SELECT *
FROM exam
ORDER BY exam_date ASC;

Ако искате да видите най-новата дата първа и най-ранната дата последна, трябва да сортирате в низходящ ред. Използвайте DESC ключова дума в този случай.

SELECT *
FROM exam
ORDER BY exam_date DESC;

Имайте предвид, че в MySQL NULL s се показват първи при сортиране във възходящ ред и последни при сортиране в низходящ ред. Също така, редовете със същия exam_date се показват в произволен ред (може да видите Science трети и Health четвърто, или Health трети и Science четвърто).

Пример 2:

exam таблицата има следните колони:subject , exam_year , exam_month и exam_day . Месеците са дадени в имена, а не в числа.

предмет изпитна_година изпит_месец изпитен_ден
Математика 2019 Декември 19
английски 2020 Януари 8
Наука 2020 Януари 5
Здраве 2020 Януари 5
Изкуство NULL NULL NULL

Искате да сортирате редовете по дата на изпита.

Решение:

SELECT *
FROM exam
ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');

Резултатът изглежда така (редовете са сортирани във възходящ ред по exam_year , exam_month и exam_date ):

предмет изпитна_година изпит_месец изпитен_ден
Изкуство NULL NULL NULL
Математика 2019 Декември 19
Здраве 2020 Януари 5
Наука 2020 Януари 5
английски 2020 Януари 8

Дискусия:

За да сортирате по дата, създайте стойности за дата от стойностите на годината, месеца и деня. За да направите това, използвайте функцията STR_TO_DATE(). Ако имате дата, съхранена като низ в 'Year Month Day ' формат, можете да го прехвърлите към дата, като използвате STR_TO_DATE(date_string, '%Y %M %d') . Но първо трябва да създадете низ с помощта на функцията CONCAT():

CONCAT(exam_year, ' ', exam_month, ' ', exam_day)

CONCAT() функцията комбинира всички аргументи в един низ. Не е нужно да прехвърляте числа към низове. Тъй като искате да получите низ в „Year Month Day ', аргументите са exam_year , exam_month , exam_day и интервалите между тях.

След това трябва да преобразувате този низ в дата, като използвате STR_TO_DATE(date_string, '%Y %M %d') функция. Вторият аргумент на тази функция е форматът на датата. %Y означава година, %M означава месец (пълното му име, а не число) и %d означава ден.

STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')

Използвайте го с ORDER BY клауза за сортиране на редовете във възходящ ред по дата. Ако искате да видите редовете в низходящ ред, просто добавете DESC ключова дума, като тази:

SELECT *
FROM exam
ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите остатък с помощта на MOD() в PostgreSQL, MS SQL Server и MySQL

  2. Научете MySQL – Седмица на новите технологии

  3. Колоната с автоматично увеличение на MySQL скача с 10 - защо?

  4. Как мога правилно да използвам PDO обект за параметризирана SELECT заявка

  5. Топ 10 най-добри практики в MySQL