PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come ottenere il giorno dell'anno da una data in PostgreSQL

Problema:

Vuoi ottenere il giorno dell'anno da una colonna data o timestamp in PostgreSQL.

Esempio:

Il nostro database ha una tabella denominata software_sale con i dati nelle colonne id , software e sale_date .

id software data_di_vendita
1 Super Game X 15-09-2019
2 Browser X 15-10-2019
3 Notizie DB 26-11-2019
4 MyPaintSoft 15-10-2018
5 Nuovo sistema operativo 15-10-2019

Contiamo il numero di articoli software venduti per giorni dell'anno. Lo useremo per scoprire in quali giorni dell'anno (indipendentemente dall'anno effettivo) le vendite sono state alte o basse.

Soluzione 1:

Useremo il DATE_PART() funzione. Ecco la domanda che scriveresti:

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

Ecco il risultato della query:

giorno_dell'anno conta
258 1
288 3
330 1

Discussione:

Usa il DATE_PART() di PostgreSQL funzione per recuperare il numero del giorno di un anno da una colonna data/ora/dataora/data/ora. Questa funzione accetta due argomenti. Il primo argomento è la parte della data (o della parte temporale) che si desidera venga restituita dalla funzione. In questo esempio, stiamo usando "doy ', che restituisce il giorno dell'anno. Puoi usare altre parti, come giorno, anno, mese, ora, minuti, settimana, ecc. Puoi saperne di più nella documentazione di PostgreSQL.

Il secondo argomento è la data/ora/dataora/data/ora da cui si desidera estrarre la parte data/ora. Può essere un'espressione che restituisce un valore di data/ora/data/ora/data/ora o il nome di una colonna data/ora/data/ora/data/ora. (Nel nostro esempio, è una colonna della data tipo di dati.)

La funzione DATE_PART() con il 'doy ' identificatore restituisce il numero del giorno dell'anno (da 1 a 365/366) come intero. Nel nostro esempio, il giorno dell'anno della data di vendita (da sale_date colonna) viene ora visualizzato in una nuova colonna, day_of_year . Il 15 ottobre è stata la 288a giornata nel 2019 e nel 2018; in quel giorno nell'arco di due anni sono state effettuate in totale tre vendite (2 nel 2019, 1 nel 2018).

Usiamo il COUNT() funzione aggregata per contare il numero di vendite. Questa funzione accetta un argomento; in questo caso, è il numero ID del software. Abbiamo anche bisogno del GROUP BY clausola in questa query per raggruppare i record in base al giorno dell'anno. (Nel nostro esempio, l'argomento effettivo è day_of_year , l'alias per DATE_PART('doy',sale_date) .)

Questo non è l'unico modo per ottenere il giorno dell'anno. Possiamo anche usare EXTRACT() funzione.

Soluzione 2:

Ecco la query che scriveresti con EXTRACT() funzione:

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

Questa funzione è simile a DATE_PART() . La differenza è che utilizziamo FROM invece di una virgola tra l'identificatore della parte della data e l'argomento data e ora. Il risultato è lo stesso. Nota:EXTRACT() è lo standard SQL.