Problema:
Você deseja classificar as linhas pelo número do mês, com os nomes dos meses (você deseja que janeiro seja mostrado primeiro, dezembro por último).
Exemplo:
O
birthday tabela contém duas colunas:name e birthday_month . Os meses são dados em nomes, não em números. | nome | aniversário_mês |
|---|---|
| Ronan Tisha | janeiro |
| Dezembro | abril |
| Angie Julia | abril |
| Narelle Dillan | abril |
| Purdie Casey | janeiro |
| Donna Nell | NULO |
| Blaze Graeme | Outubro |
Você deseja classificar as linhas por
birthday_month . Solução:
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);
O resultado é assim (as linhas são classificadas em ordem crescente por
birthday_month ):| nome | aniversário_mês |
|---|---|
| Purdie Casey | janeiro |
| Angie Julia | abril |
| Narelle Dillan | abril |
| Blaze Graeme | Outubro |
| Ronan Tisha | janeiro |
| Dezembro | NULO |
| Donna Nell | NULO |
Discussão:
Para classificar as linhas por mês, você precisa dos meses em números (não em nomes). Você pode converter nomes de meses em meses numéricos usando o
CASE WHEN cláusula. Após o CASE palavra-chave, especifique o nome da coluna. Então, após cada WHEN , indique o valor nesta coluna, use o THEN palavra-chave e especifique o novo valor que deseja atribuir em vez do antigo. Aqui, a coluna é birthday_month , os valores atuais nesta coluna são 'January ', 'February ', …, 'December ', e os novos valores são os meses numéricos 1 , 2, …, 12 . Depois de terminar de converter todos os valores, lembre-se de usar o END palavra-chave para fechar o CASE WHEN cláusula. Dê uma olhada: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
É assim que você converte um nome de mês em um número de mês. Você pode usá-lo para classificar as linhas em ordem crescente por mês - basta usá-lo no
ORDER BY cláusula. Observe que no SQLite,
NULL s são exibidos primeiro ao classificar em ordem crescente e por último ao classificar em ordem decrescente. Além disso, as linhas com o mesmo birthday_month são exibidos em ordem aleatória (você pode ver Angie Julia segundo e Narelle Dillan terceiro, ou Narelle Dillan segundo e Angie Julia terceiro). Para alterar a ordem para decrescente, use o DESC palavra-chave após a coluna no ORDER BY cláusula. Veja como deve ser a consulta:
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;