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 | NULL |
Décembre | Janvier |
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 EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
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 à partir de janvier et se terminant par décembre, vous devez convertir le mois en nombre ('January
' au 1, 'February
' à 2
, etc.). Sinon, vous verriez 'December
' avant 'January
'. La fonction TO_DATE(birthday_month, 'Month') convertit un nom de mois complet en une date dans le '0001-MM-01
'. Par exemple, vous obtenez '0001-12-01
' pour décembre.
Vous pouvez maintenant utiliser la fonction EXTRACT(MONTH FROM date) pour extraire le mois de cette valeur de date. Le mois sera un nombre entre 1
et 12
.
En combinant ces deux fonctions, vous pouvez obtenir le mois sous forme de nombre en utilisant la formule suivante :
EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
Placez cette expression après ORDER BY
pour trier les lignes par mois. Si vous souhaitez voir le dernier mois en premier, vous devrez trier par ordre décroissant. Pour ce faire, vous devez utiliser un DESC
mot-clé, comme ceci :
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
Notez que dans PostgreSQL et Oracle, NULL
s sont affichés en dernier lors d'un tri par ordre croissant et en premier 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).