Проблем:
Искате да сортирате редовете по дата.
Пример 1:
exam
таблицата има две колони, subject
и exam_date
.
предмет | дата_изпит |
---|---|
Математика | 19.12.2019 |
английски | 08.01.2020 |
Наука | 2020-01-05 |
Здраве | 2020-01-05 |
Изкуство | NULL |
Искате да сортирате редовете по exam_date
.
Решение:
ИЗБЕРЕТЕ *ОТ examORDER BY exam_date;
Резултатът изглежда така (редовете са сортирани във възходящ ред по exam_date
):
Тема | Дата на изпита |
---|---|
Изкуство | NULL |
Математика | 19.12.2019 |
Наука | 2020-01-05 |
Здраве | 2020-01-05 |
английски | 08.01.2020 |
Дискусия:
Използвайте ORDER BY
ключова дума и името на колоната, по която искате да сортирате. По този начин ще сортирате данните във възходящ ред по тази колона. Можете също да използвате ASC
ключова дума, за да стане ясно, че поръчката е възходяща (най-ранната дата се показва първа, най-новата дата се показва последна и т.н.).
SELECT *FROM examORDER BY exam_date ASC;
Ако искате да видите най-новата дата първа и най-ранната дата последна, трябва да сортирате в низходящ ред. Използвайте DESC
ключова дума в този случай.
ИЗБЕРЕТЕ *ОТ examORDER BY exam_date DESC;
Имайте предвид, че в SQLite 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 |
Решение:
ИЗБЕРЕТЕ *FROM examORDER BY exam_year, (СЛУЧАЙ exam_month КОГА 'Януари' СЛЕД 1 КОГА 'ФЕВРУАРИ' ПОСЛЕ 2 КОГАТО 'Март' ПОСЛЕ 3 КОГАТО 'Април' ПОСЛЕ 4 КОГА 'Май' СЛЕД 5 КОГА КОГАТО КОГАТО 'Ju „Юли“ ПОСЛЕ 7 КОГА „Август“ ПОСЛЕ 8 КОГА „Септември“ ПОСЛЕ 9 КОГА „Октомври“ ПОСЛЕ 10 КОГА „Ноември“ ПОСЛЕ 11 КОГА „Декември“ ПОСЛЕ 12 КРАЙ), изпит_ден;
Резултатът изглежда така (редовете са сортирани във възходящ ред по exam_year
, exam_month
и exam_day
):
предмет | изпитна_година | изпит_месец | изпитен_ден |
---|---|---|---|
Изкуство | NULL | NULL | NULL |
Математика | 2019 | Декември | 19 |
Здраве | 2020 | Януари | 5 |
Наука | 2020 | Януари | 5 |
английски | 2020 | Януари | 8 |
Дискусия:
За да сортирате редовете по дата на изпита, първо трябва да сортирате по година, след това по числов месец (а не по име на месеца) и накрая по ден. Можете да конвертирате имената на месеци в числови месеци с CASE WHEN
клауза. След CASE
ключова дума, посочете името на колоната. След това, след всяко КОГА, посочете стойността в тази колона, използвайте ключовата дума THEN и посочете новата стойност, която искате да присвоите вместо старата. Тук колоната е exam_month
, текущите стойности в тази колона са „January
', 'February
', …, 'December
“, а новите стойности са числовите месеци 1
, 2
, …, 12
. След като завършите преобразуването на всички стойности, не забравяйте да използвате END
ключова дума, за да затворите CASE WHEN
клауза. Разгледайте:
Изпит за дело_month, когато 'януари', тогава 1, когато 'февруари', тогава 2, когато "март", тогава 3, когато "април", тогава 4, когато "може", тогава 5, когато "юни", тогава 6, когато "юли", тогава 7, когато "август ' ТО 8 КОГА 'Септември' ПОСЛЕ 9 КОГА 'Октомври' ПОСЛЕ 10 КОГА 'Ноември' ПОСЛЕ 11 КОГА 'ДЕКЕМВРИ' ПОСЛЕ 12 КРАЙ
Ето как преобразувате името на месец в номер на месец. Можете да го използвате, когато сортирате редовете по дата, тоест по година, числов месец и ден.
ПОРЪЧАЙТЕ ПО година_изпит, (СЛУЧАЙ exam_month КОГА „Януари“ ПОСЛЕ 1 КОГА „Февруари“ ПОСЛЕ 2 КОГА „Март“ ПОСЛЕ 3 КОГА „Април“ ПОСЛЕ 4 КОГА „Май“ ПОСЛЕ 5 КОГА „Юни КОГА“ ТОГАВА ПОСЛЕ 7 КОГА „Август“ ПОСЛЕ 8 КОГА „Септември“ ПОСЛЕ 9 КОГА „Октомври“ ПОСЛЕ 10 КОГА „Ноември“ ПОСЛЕ 11 КОГА „Декември“ ПОСЛЕ 12 КРАЙ), изпит_ден
По този начин можете да сортирате редовете във възходящ ред по дата. NULL
s ще се покаже първо. За да промените реда на низходящ, използвайте DESC
ключова дума след всяка колона в ORDER BY
клауза. Ето как трябва да изглежда цялата заявка:
ИЗБЕРЕТЕ *ОТ examORDER BY exam_year DESC, (СЛУЧАЙ изпит_месец КОГА 'Януари' СЛЕД 1 КОГА 'Февруари' ПОСЛЕ 2 КОГА 'Март' ПОСЛЕ 3 КОГА 'Април' ПОСЛЕ 4 КОГА 'Май' ТО 5 U КОГАТО КОГА „Юли“ СЛЕД 7 КОГА „Август“ СЛЕД 8 КОГА „Септември“ ПОСЛЕ 9 КОГА „Октомври“ ПОСЛЕ 10 КОГА „Ноември“ ПОСЛЕ 11 КОГА „Декември“ СЛЕД 12 КРАЙ) DESC, изпит_ден DESC;Имайте предвид, че когато сортирате в низходящ ред в SQLite,
NULL
s се показват последно.