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

Как да поръчате по дата в SQLite

Проблем:

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

Пример 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 се показват последно.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да активирате/деактивирате ограниченията на CHECK в SQLite

  2. Android:Как да поискате курсор за опресняване на ListView след изтриване на ред в базата данни?

  3. Android:групово вмъкване, когато InsertHelper е остарял

  4. Архивирайте SQLite база данни

  5. SQLite DROP VIEW