Problème :
Vous souhaitez trier les lignes par numéro de mois, en fonction des noms de mois (vous souhaitez que janvier s'affiche en premier, décembre en dernier).
Exemple :
Le birthday le tableau contient deux colonnes :nom et birthday_month . Les mois sont donnés en noms, pas en nombres.
| nom | anniversaire_mois |
|---|---|
| Ronan Tisha | Janvier |
| Décembre | Avril |
| Angie Julia | Avril |
| Narelle Dillan | Avril |
| Purdie Casey | Janvier |
| Donna Nell | NULL |
| Blaze Graeme | Octobre |
Vous souhaitez trier les lignes par birthday_month .
Solution :
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);
Le résultat ressemble à ceci (les lignes sont triées par ordre croissant de birthday_month ):
| nom | anniversaire_mois |
|---|---|
| Purdie Casey | Janvier |
| Angie Julia | Avril |
| Narelle Dillan | Avril |
| Blaze Graeme | Octobre |
| Ronan Tisha | Janvier |
| Décembre | NULL |
| Donna Nell | NULL |
Discussion :
Pour trier les lignes par mois, vous avez besoin des mois en chiffres (et non en noms). Vous pouvez convertir les noms de mois en mois numériques en utilisant le CASE WHEN clause. Après le CASE mot-clé, indiquez le nom de la colonne. Puis, après chaque WHEN , indiquez la valeur dans cette colonne, utilisez le THEN mot-clé et spécifiez la nouvelle valeur que vous souhaitez attribuer à la place de l'ancienne. Ici, la colonne est birthday_month , les valeurs actuelles de cette colonne sont 'January ', 'February ', …, 'December ', et les nouvelles valeurs sont les mois numériques 1 , 2, …, 12 . Après avoir fini de convertir toutes les valeurs, n'oubliez pas d'utiliser le END mot clé pour fermer le CASE WHEN clause. Jetez un œil :
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
C'est ainsi que vous convertissez un nom de mois en un numéro de mois. Vous pouvez l'utiliser pour trier les lignes par ordre croissant par mois - utilisez-le simplement dans le ORDER BY clause.
Notez que dans SQLite, NULL s sont affichés en premier lors d'un tri par ordre croissant et en dernier lors d'un tri par ordre décroissant. Aussi, les lignes avec le même birthday_month sont affichés dans un ordre aléatoire (vous pouvez voir Angie Julia deuxième et Narelle Dillan troisième, ou Narelle Dillan deuxième et Angie Julia troisième). Pour changer l'ordre en décroissant, utilisez le DESC mot-clé après la colonne dans le ORDER BY clause. Voici à quoi devrait ressembler la requête :
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;