8th Jul 2024 Tempo di lettura: 10 minuti Funzioni di data PostgreSQL Martyna Sławińska postgresql date and time functions Indice Tipi di dati di data e ora in PostgreSQL Panoramica delle funzioni di data e ora in PostgreSQL Confronto dei valori di data e ora Operatore di uguaglianza (=) Operatore non uguale (!= o <>) Operatore Maggiore di (>) Operatore Maggiore o uguale (>=) Operatore Meno di (<) Operatore Meno di o uguale (<=) Operatore BETWEEN Operatore NOT BETWEEN Ottenere i valori attuali di data e ora ORA() DATA CORRENTE ORA_CORRENTE TIMESTAMP_CORRENTE Operazioni aritmetiche sui valori di data e ora Manipolazione dei valori di data e ora DATE_PART() ESTRATTO() DATE_TRUNC() FARE_DATA() GENERA_SERIE() Formattazione dei valori di data e ora TO_CHAR() TO_DATE() TO_TIMESTAMP() Lavorare con le funzioni di data e ora di PostgreSQL La comprensione delle funzioni di data e ora nel vostro database è essenziale per un'analisi e un reporting efficaci dei dati. Continuate a leggere per saperne di più sulle funzioni di data di PostgreSQL. Questo articolo illustra alcune delle più utili funzioni di data e ora di PostgreSQL e le loro applicazioni nell'analisi dei dati e nella creazione di report. Le funzioni di data SQL facilitano diverse attività di analisi dei dati, tra cui l'analisi delle vendite, il reporting finanziario, l'analisi dei siti web e altro ancora. Questo articolo presenta gli strumenti, sotto forma di funzioni di data e ora PostgreSQL, utilizzati per svolgere questi compiti. Inizieremo con una rapida panoramica dei tipi di dati di data e ora disponibili in PostgreSQL prima di passare alle funzioni. Consultate il nostro Ricettario SQL, che contiene una serie di ricette SQL per PostgreSQL e altri dialetti. Si tratta di una risorsa preziosa che vale la pena di tenere tra i preferiti per una rapida consultazione durante la scrittura delle query. Per saperne di più sul concetto di ricettario SQL, cliccate qui. Tipi di dati di data e ora in PostgreSQL In PostgreSQL sono disponibili diversi tipi di dati per memorizzare i valori di data e ora. Di seguito è riportata una panoramica dei tipi più frequentemente utilizzati: Data TypeUsageFormatExample DATEIt stores date values that include a year (YYYY), month (MM), and day (DD).YYYY-MM-DD2024-06-01 TIMEIt stores time values that include an hour (HH), minute (MM), and second (SS).HH:MM:SS12:30:15 TIMESTAMPIt stores date and time values.YYYY-MM-DD HH:MM:SS2024-07-30 12:30:15 INTERVALIt stores an interval between two date/time values or an interval that can be added to or subtracted from a date/time value.INTERVAL 'x YEAR x MONTH x DAY x HOUR x MINUTE x SECOND'INTERVAL '2 YEARS 1 MONTH 3 DAYS 4 HOURS 1 MINUTE' Per l'analisi dei dati che devono prendere in considerazione diversi fusi orari, PostgreSQL offre tipi di dati come TIME WITH TIME ZONE (che memorizza i valori dell'ora con le informazioni sul fuso orario) e TIMESTAMP WITH TIME ZONE (che memorizza i valori di data e ora con le informazioni sul fuso orario). Leggete il nostro articolo Una panoramica dei tipi di dati PostgreSQL per saperne di più sui tipi di dati disponibili in PostgreSQL. E se volete fare più pratica, date un'occhiata a questi 19 esercizi su PostgreSQL con soluzioni dettagliate. Utilizzeremo tutti i tipi di dati di cui sopra per esplorare le funzioni di data e ora di PostgreSQL. Iniziamo! Panoramica delle funzioni di data e ora in PostgreSQL Tutte le funzioni di data e ora di PostgreSQL possono essere raggruppate nelle seguenti categorie: Confronto dei valori di data e ora Ottenere i valori correnti di data e ora Esecuzione di operazioni aritmetiche sui valori di data e ora Manipolazione dei valori di data e ora Formattazione dei valori di data e ora Nelle sezioni seguenti sono elencate tutte le funzioni pertinenti con esempi. Questa è la sales che utilizzeremo per i nostri esempi: sale_idsale_datesale_timesale_timestampshop_nameproduct_nameamount_sold 12024-06-0108:00:002024-06-01 08:00:00GreenGrocerApples100 22024-06-0110:30:002024-06-01 10:30:00GreenGrocerBananas150 32024-06-0111:45:002024-06-01 11:45:00GreenGrocerOranges200 42024-06-0109:15:002024-06-01 09:15:00SuperMartCharger6 52024-06-0113:20:002024-06-01 13:20:00SuperMartHeadphones9 62024-06-0114:45:002024-06-01 14:45:00SuperMartLaptop11 72024-06-0110:00:002024-06-01 10:00:00MegaMallKeyboard5 82024-06-0111:30:002024-06-01 11:30:00MegaMallMouse8 92024-06-0112:45:002024-06-01 12:45:00MegaMallMonitor10 102024-06-0113:30:002024-06-01 13:30:00MegaMallPrinter6 Confronto dei valori di data e ora Per confrontare i valori di data e ora in PostgreSQL, si utilizzano gli operatori di confronto standard. Questi operatori includono =, !=, <>, >, >=, <, <=, BETWEEN, e NOT BETWEEN. Di seguito sono riportati alcuni esempi di utilizzo di ciascun operatore di confronto. Operatore di uguaglianza (=) Domanda: Quante vendite si sono verificate il 1° giugno 2024? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_date = '2024-06-01'; count 10 Operatore non uguale (!= o <>) Domanda: Quante vendite non si sono verificate alle 10:00:00? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_time != '10:00:00'; count 9 Operatore Maggiore di (>) Domanda: Quante vendite si sono verificate dopo il 1° giugno 2024, alle ore 10:00:00? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp > '2024-06-01 10:00:00'; count 6 Nota: quando si confrontano le date in SQL, l'operatore > significa che se la data X è maggiore della data Y, la data X è più lontana nel futuro (successiva) rispetto alla data Y. Operatore Maggiore o uguale (>=) Domanda: Quante vendite si sono verificate alle 10:00:00 del 1° giugno 2024? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp >= '2024-06-01 10:00:00'; count 7 Nota: Quando si confrontano i timestamp in SQL, l'operatore >= significa che se il timestamp X è maggiore o uguale al timestamp Y, il timestamp X è più lontano nel futuro (successivo) rispetto al timestamp Y. Operatore Meno di (<) Domanda: Quante vendite si sono verificate prima delle 12:00:00 del 1° giugno 2024? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp < '2024-06-01 12:00:00'; count 7 Nota: quando si confrontano i timestamp in SQL, l'operatore < significa che se il timestamp X è inferiore al timestamp Y, X è antecedente a Y. Operatore Meno di o uguale (<=) Domanda: Quante vendite si sono verificate il 1° giugno 2024 alle 12:00:00 o prima? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp <= '2024-06-01 12:00:00'; count 7 Nota: Quando si confrontano date o orari in SQL, l'operatore <= significa che se la data X è inferiore o uguale alla data Y, la data X è precedente o uguale alla data Y. Operatore BETWEEN Domanda: Quante vendite si sono verificate tra le 10:00:00 e le 14:00:00? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp BETWEEN '2024-06-01 10:00:00' AND '2024-06-01 14:00:00'; count 6 Operatore NOT BETWEEN Domanda: Quante vendite non si sono verificate tra le 10:00:00 e le 14:00:00? Risposta: SELECT COUNT(*) AS count FROM sales WHERE sale_timestamp NOT BETWEEN '2024-06-01 10:00:00' AND '2024-06-01 14:00:00'; count 4 Buono a sapersi: È possibile ordinare l'output in base alla data, all'ora o al timestamp, semplicemente includendo la colonna corrispondente nella clausola ORDER BY. Per saperne di più, consultare i seguenti ricettari: Come confrontare 2 date nella clausola WHERE in SQL Come confrontare i valori di data e ora in SQL Come confrontare i valori di una data in SQL Come ordinare per data in PostgreSQL o Oracle Ottenere i valori attuali di data e ora Quando si analizzano i dati, spesso si desidera confrontarli con il timestamp corrente ogni volta che la query viene eseguita. In PostgreSQL, questo può essere ottenuto con la funzione NOW() e con le parole chiave CURRENT_DATE, CURRENT_TIME e CURRENT_TIMESTAMP. Importante: la funzione NOW() è specifica di PostgreSQL, mentre le funzioni CURRENT_* sono presenti in SQL standard e se ne consiglia l'uso al posto della funzione NOW(). ORA() Utilizzare questa funzione per selezionare la data e l'ora correnti insieme al fuso orario. SELECT NOW(); now 2024-06-09 17:00:55.732 +0200 DATA CORRENTE Utilizzare questa parola chiave per selezionare la data corrente. SELECT CURRENT_DATE; current_date 2024-06-09 ORA_CORRENTE Utilizzare questa parola chiave per selezionare l'ora corrente insieme al fuso orario (ma senza la data). SELECT CURRENT_TIME; current_time 17:03:50 +0200 TIMESTAMP_CORRENTE Utilizzare questa funzione per selezionare la data e l'ora correnti insieme al fuso orario. SELECT CURRENT_TIMESTAMP; current_timestamp 2024-06-09 17:05:45.854 +0200 Per saperne di più, consultate questi ricettari: Come ottenere la data corrente in PostgreSQL Come ottenere l'ora corrente in PostgreSQL Come ottenere la data e l'ora correnti (senza fuso orario) in PostgreSQL Come ottenere la data e l'ora correnti con l'offset del fuso orario in PostgreSQL Come ottenere l'ora corrente (senza fuso orario) in PostgreSQL Operazioni aritmetiche sui valori di data e ora Le operazioni aritmetiche sui valori di data e ora in PostgreSQL includono il calcolo della differenza tra due date e l'aggiunta o la sottrazione di INTERVALs a o dai valori di data e ora. Seguite gli esempi di utilizzo riportati di seguito per: Calcolare la differenza tra due valori di data utilizzando la funzione AGE(). SELECT AGE(sale_date, CURRENT_DATE) AS age_difference FROM sales WHERE product_name = 'Apples'; age_difference -8 days Si noti che questa funzione restituisce l'INTERVALLO tra due valori. Calcolare la differenza tra due valori di data utilizzando l'operatore meno (-). SELECT sale_timestamp - CURRENT_TIMESTAMP AS difference FROM sales WHERE product_name = 'Apples'; difference -8 days -09:56:38.387095 Si noti che restituisce un intervallo tra due valori, come farebbe la funzione age(). Calcolare la differenza tra due valori temporali utilizzando l'operatore meno (-). SELECT sale_time, sale_time - '09:00:00' AS difference FROM sales WHERE product_name = 'Apples'; sale_timedifference 08:00:00-01:00:00 Aggiungere gli INTERVALLI. Utilizzare l'operatore più (+) per aggiungere un INTERVAL a un valore di data/ora: SELECT sale_date + INTERVAL '1 day' AS next_day FROM sales WHERE product_name = 'Apples'; next_day 2024-06-02 00:00:00.000 Sottrarre gli INTERVALLI. Usare l'operatore meno (-) per sottrarre un INTERVAL da un valore di data/ora. SELECT sale_date - INTERVAL '1 week' AS previous_week FROM sales WHERE product_name = 'Apples'; previous_week 2024-05-25 00:00:00.000 Per saperne di più, consultate questi ricettari: Come calcolare la differenza di data in PostgreSQL/Oracle Come calcolare la differenza di data e ora in PostgreSQL Come trovare l'intervallo tra due date in PostgreSQL Come ottenere la data di ieri in PostgreSQL Manipolazione dei valori di data e ora PostgreSQL fornisce funzioni che facilitano l'estrazione di parti specifiche di valori di data/ora, come DATE_PART(), DATE_TRUNC() e EXTRACT(). Nell'analisi dei dati, queste funzioni sono comunemente utilizzate per raggruppare i dati per giorno, mese o anno, consentendo così la creazione di report con statistiche su periodi di tempo definiti. DATE_PART() Estrae un componente specifico (ad esempio, anno, mese o giorno) da un valore di data/ora. SELECT DATE_PART('year', sale_date) AS sale_year FROM sales WHERE product_name = 'Apples'; sale_year 2024 ESTRATTO() Estrae una parte specifica (ad esempio, anno, mese o giorno) da un valore di data/ora. SELECT EXTRACT(YEAR FROM sale_date) AS sale_year FROM sales WHERE product_name = 'Apples'; sale_year 2024 La funzione EXTRACT() può essere utilizzata in modo intercambiabile con la funzione DATE_PART(). Tuttavia, EXTRACT() può gestire i fusi orari. DATE_TRUNC() Tronca un valore di data/ora all'unità specificata (ad esempio, anno, mese o giorno). SELECT DATE_TRUNC('year', sale_date) AS year_start FROM sales WHERE product_name = 'Apples'; year_start 2024-01-01 00:00:00.000 +0100 FARE_DATA() Assembla una data completa a partire da anno, mese e giorno. SELECT MAKE_DATE('2024', '6', '1') AS date; date 2024-06-01 GENERA_SERIE() Genera una serie di valori di data/ora con intervalli uguali. SELECT GENERATE_SERIES( '2024-06-01 08:00:00'::timestamp, '2024-06-01 09:00:00'::timestamp, '20 minutes'::interval ) AS generated_timestamp; generated_timestamp 2024-06-01 08:00:00.000 2024-06-01 08:20:00.000 2024-06-01 08:40:00.000 2024-06-01 09:00:00.000 Per saperne di più, consultate questi ricettari: Come raggruppare per mese in PostgreSQL Come raggruppare per anno in SQL Come estrarre il numero della settimana da una data in PostgreSQL Come ottenere i nomi dei giorni in PostgreSQL Come ottenere il giorno dell'anno da una data in PostgreSQL Come ordinare per nome del mese in PostgreSQL o Oracle Come ottenere il mese precedente in SQL Formattazione dei valori di data e ora PostgreSQL offre diverse funzioni di formattazione che facilitano la lettura dei report. Queste funzioni includono TO_CHAR(), TO_DATE() e TO_TIMESTAMP(). TO_CHAR() Converte un valore di data/ora in una stringa formattata secondo un formato specificato. SELECT TO_CHAR(sale_date, 'MM/DD/YYYY') AS formatted_date FROM sales WHERE product_name = 'Apples'; SELECT TO_CHAR(sale_date, 'MM/DD/YYYY') AS formatted_date FROM sales WHERE product_name = 'Apples'; formatted_date 06/01/2024 Per conoscere i formati di data/ora disponibili forniti da PostgreSQL, vedere qui. TO_DATE() Converte una stringa in un valore di data secondo un formato specificato. SELECT TO_DATE('2024-06-01', 'YYYY-MM-DD') AS date_value; date_value 2024-06-01 TO_TIMESTAMP() Converte una stringa in un valore di timestamp secondo un formato specificato. SELECT TO_TIMESTAMP('2024-06-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS') AS timestamp_value; timestamp_value 2024-06-01 08:00:00.000 +0200 Per saperne di più, consultate questi libri di cucina: Come formattare una data in PostgreSQL Come convertire una stringa in una data in PostgreSQL Come convertire una stringa in un timestamp in PostgreSQL Lavorare con le funzioni di data e ora di PostgreSQL Le funzioni di data e ora offerte da PostgreSQL sono strumenti fondamentali per l'analisi dei dati e la creazione di report. Possono aiutarci a capire i modelli di dati nel tempo, come le tendenze di vendita o i picchi di traffico di un sito web. Con queste funzioni possiamo raggruppare i dati per giorno, mese o anno, rendendo più facile individuare le tendenze e prendere decisioni informate. Inoltre, ci aiutano a formattare i nostri report, rendendoli più facili da leggere e da capire. Poiché i dati sono spesso archiviati in database o file diversi, è possibile importare i dati in formato CSV in PostgreSQL per un'ulteriore elaborazione. Se avete bisogno di un pratico promemoria sulle funzioni SQL, consultate il nostro foglio informativo gratuito Funzioni SQL standard. Potete scaricarlo, stamparlo e tenerlo a portata di mano mentre lavorate e imparate. Se volete consolidare la vostra conoscenza di PostgreSQL, date un'occhiata al nostro corso completo SQL dalla A alla Z in PostgreSQL. Offre centinaia di esercizi per insegnarvi tutto ciò che dovete sapere per diventare un professionista di Postgres, compresi concetti avanzati come le funzioni finestra, le query ricorsive e PostGIS. Buon apprendimento! Tags: postgresql date and time functions