PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment obtenir le jour de l'année à partir d'une date dans PostgreSQL

Problème :

Vous souhaitez obtenir le jour de l'année à partir d'une colonne de date ou d'horodatage dans PostgreSQL.

Exemple :

Notre base de données a une table nommée software_sale avec des données dans les colonnes id , software , et sale_date .

identifiant logiciel vente_date
1 Super Jeu X 2019-09-15
2 Navigateur X 2019-10-15
3 Actualités DB 2019-11-26
4 MyPaintSoft 2018-10-15
5 Nouveau système d'exploitation 2019-10-15

Comptons le nombre de logiciels vendus par jours de l'année. Nous l'utiliserons pour savoir quels jours de l'année (indépendamment de l'année réelle) les ventes ont été élevées ou faibles.

Solution 1 :

Nous utiliserons le DATE_PART() une fonction. Voici la requête que vous écririez :

SELECT DATE_PART('doy',sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Voici le résultat de la requête :

jour_de_l'année compter
258 1
288 3
330 1

Discussion :

Utilisez le DATE_PART() de PostgreSQL fonction pour récupérer le numéro du jour d'une année à partir d'une colonne date/heure/dateheure/horodatage. Cette fonction prend deux arguments. Le premier argument est la partie date (ou heure) que la fonction doit renvoyer. Dans cet exemple, nous utilisons 'doy ’, qui renvoie le jour de l’année. Vous pouvez utiliser d'autres parties, comme le jour, l'année, le mois, l'heure, la minute, la semaine, etc. Vous pouvez en savoir plus dans la documentation PostgreSQL.

Le deuxième argument est la date/heure/dateheure/horodatage dont vous voulez extraire la partie date/heure. Il peut s'agir d'une expression renvoyant une valeur date/heure/dateheure/horodatage ou le nom d'une colonne date/heure/dateheure/horodatage. (Dans notre exemple, il s'agit d'une colonne de la date type de données.)

La fonction DATE_PART() avec le 'doy L'identifiant renvoie le numéro du jour de l'année (de 1 à 365/366) sous forme d'entier. Dans notre exemple, le jour de l'année de la date de vente (à partir de la sale_date colonne) est maintenant affiché dans une nouvelle colonne, day_of_year . Le 15 octobre était le 288e jour en 2019 et en 2018; ce jour-là sur deux ans, un total de trois ventes ont été réalisées (2 en 2019, 1 en 2018).

Nous utilisons le COUNT() fonction d'agrégation pour compter le nombre de ventes. Cette fonction prend un argument; dans ce cas, il s'agit du numéro d'identification du logiciel. Nous avons également besoin du GROUP BY clause dans cette requête pour regrouper les enregistrements en fonction du jour de l'année. (Dans notre exemple, l'argument réel est day_of_year , l'alias de DATE_PART('doy',sale_date) .)

Ce n'est pas la seule façon d'obtenir le jour de l'année. On peut aussi utiliser le EXTRACT() fonction.

Solution 2 :

Voici la requête que vous écririez avec le EXTRACT() fonction :

SELECT EXTRACT('doy' FROM sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Cette fonction est similaire à DATE_PART() . La différence est que nous utilisons FROM au lieu d'une virgule entre l'identifiant de la partie date et l'argument date et heure. Le résultat est le même. Remarque :EXTRACT() est la norme SQL.