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