76 votes

Sélection par mois en PostgreSQL

Je veux sélectionner des lignes en fonction du mois d'une colonne date ou timestamp comme ceci :

SELECT id, name, birthday 
FROM employee.person 
WHERE Month(birthday) > 10;

Mais je reçois uniquement des messages d'erreur dans PostgreSQL.
Comment cela peut-il être fait ?

150voto

jimmy_keen Points 14831

Vous pouvez utiliser la fonction EXTRACT, comme ceci :

SELECT id, name, birthday FROM employee.person 
WHERE EXTRACT(MONTH FROM birthday) > 10;

Votre problème vient du fait qu'il n'existe pas de fonction Month dans PostgreSQL. Consultez la documentation en ligne ici pour voir ce que vous pouvez obtenir à la place. Extract devrait être suffisant.

0 votes

J'ai reçu HINT : Aucune fonction ne correspond aux types de nom et d'arguments donnés. Vous devrez peut-être ajouter des conversions de types explicites.

2 votes

Le revers de cette méthode est qu'elle ne peut pas utiliser un index sur la colonne de la date de naissance.

0 votes

Ce conseil a vraiment fonctionné pour moi, il suffit d'être prudent que le mois = '08', n'est pas un entier, il doit donc être mis entre guillemets.

1voto

Anish Jain Points 11

Si vous le souhaitez, vous pouvez également extraire le nom du mois en utilisant la fonction suivante.

SELECT TO_CHAR(DATE(REPORT_DATE), 'Month') FROM TABLE_NAME

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X