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

Как да поръчате по име на месец в SQLite

Проблем:

Искате да сортирате редовете по номер на месец, като са дадени имена на месеци (искате януари да се показва първи, декември миналия).

Пример:

birthday таблицата съдържа две колони:име и birthday_month . Месеците са дадени в имена, а не в числа.

name рожден_месец
Ронан Тиша Януари
Декември Април
Анджи Джулия Април
Нарел Дилън Април
Пърди Кейси Януари
Дона Нел NULL
Блейз Грейм октомври

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

Решение:

SELECT *
FROM birthday
ORDER BY
 (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END);

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

name рожден_месец
Пърди Кейси Януари
Анджи Джулия Април
Нарел Дилън Април
Блейз Грейм октомври
Ронан Тиша Януари
Декември NULL
Дона Нел NULL

Дискусия:

За да сортирате редовете по месеци, ви трябват месеците в числа (не имена). Можете да преобразувате имената на месеци в числови месеци с помощта на CASE WHEN клауза. След CASE ключова дума, посочете името на колоната. След това, след всеки WHEN , посочете стойността в тази колона, използвайте THEN ключова дума и посочете новата стойност, която искате да присвоите вместо старата. Тук колоната е birthday_month , текущите стойности в тази колона са „January ', 'February ', …, 'December “, а новите стойности са числовите месеци 1 , 2, …, 12 . След като завършите преобразуването на всички стойности, не забравяйте да използвате END ключова дума, за да затворите CASE WHEN клауза. Разгледайте:

CASE birthday_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

Ето как преобразувате името на месец в номер на месец. Можете да го използвате, за да сортирате редовете във възходящ ред по месеци – просто го използвайте в ORDER BY клауза.

Имайте предвид, че в SQLite NULL s се показват първи при сортиране във възходящ ред и последни при сортиране в низходящ ред. Също така редовете със същия birthday_month се показват в произволен ред (може да видите Angie Julia второ и Narelle Dillan трето, или Narelle Dillan второ и Angie Julia трето). За да промените реда на низходящ, използвайте DESC ключова дума след колоната в ORDER BY клауза. Ето как трябва да изглежда заявката:

SELECT *
FROM birthday
ORDER BY
  (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) 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. SQLite избира редове, ако времевата марка съвпада с днешната дата

  2. Актуализация на SQLite

  3. Включете имена на колони в резултатите от заявката на SQLite

  4. Какви са режийните разходи при използването на AUTOINCREMENT за SQLite на Android?

  5. Форматирайте резултатите от SQLite заявката като колони със заглавки на колони