Проблем:
Искате да сортирате редовете по номер на месец, като са дадени имена на месеци (искате януари да се показва първи, декември миналия).
Пример:
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;