Snowflake DATEADD: guida completa con esempi pratici
Impara a usare la funzione DATEADD di Snowflake per manipolare le date con esempi reali. Padroneggia i calcoli temporali, gestisci i casi limite e ottimizza le performance nelle tue query SQL.
La funzione DATEADD di Snowflake è un metodo relativamente semplice ma potente per eseguire qualsiasi tipo di aritmetica sulle date: permette ai professionisti dei dati di aggiungere o sottrarre un intervallo di tempo specifico da un valore di data, ora o timestamp.
Capire come usare DATEADD ti consentirà, come data analyst e/o ingegnere, di eseguire analisi utili calcolando periodi di abbonamento, costruendo proiezioni per qualsiasi data futura e persino generando dataset di serie temporali per ulteriori analisi.
In questo tutorial imparerai la sintassi della funzione, come applicarla nella pratica e il potenziale complessivo di DATEADD nel tuo arsenale di manipolazione delle date in Snowflake SQL.
Configurare un database di esempio per fare pratica
Prima di entrare nei dettagli di DATEADD, creiamo un database di esempio ricco di date per rendere i nostri esempi più pratici e hands-on. Lavorare con dati reali aiuterà a fissare i concetti mentre impariamo le capacità della funzione.
Ora abbiamo un database di esempio funzionante con tre tabelle che contengono diversi formati di date e timestamp. Questo dataset sarà la base per esplorare la funzione DATEADD nel resto del tutorial.
Capire Snowflake DATEADD: sintassi e parametri
La funzione DATEADD è fondamentale per le operazioni di aritmetica sulle date in Snowflake. Ti consente di aggiungere o sottrarre intervalli di tempo specifici da valori di data, ora o timestamp. Vediamo come funziona, partendo da sintassi e parametri.
Sintassi e parametri della funzione
La sintassi di base di DATEADD è:
DATEADD(date_part,value, date_or_timestamp_expression)Offerto da
Esaminiamo ciascun parametro:
-- Basic DATEADD exampleSELECT
DATEADD(MONTH,3,'2023-01-15')AS three_months_later;Offerto da
Spiegazione: questa query aggiunge 3 mesi al 15 gennaio 2023. I parametri funzionano così:
date_part (MONTH): specifica l'unità di tempo che stiamo aggiungendo o sottraendo
value (3): il numero di unità da aggiungere (positivo) o sottrarre (negativo)
date_or_timestamp_expression ('2023-01-15'): la data di partenza da modificare
Output:
THREE_MONTHS_LATER
-----------------2023-04-15Offerto da
Parti di data supportate
Snowflake supporta diverse parti di data utilizzabili con DATEADD:
-- Examples of different date partsSELECT
DATEADD(YEAR,1,'2023-02-28')AS add_one_year,
DATEADD(QUARTER,2,'2023-01-31')AS add_two_quarters,
DATEADD(MONTH,3,'2023-01-31')AS add_three_months,
DATEADD(WEEK,2,'2023-03-15')AS add_two_weeks,
DATEADD(DAY,10,'2023-03-21')AS add_ten_days,
DATEADD(HOUR,12,'2023-03-10 08:30:00')AS add_twelve_hours,
DATEADD(MINUTE,45,'2023-03-10 08:30:00')AS add_forty_five_minutes,
DATEADD(SECOND,30,'2023-03-10 08:30:00')AS add_thirty_seconds;Offerto da
Ulteriori parti di data supportate includono MILLISECOND, MICROSECOND, NANOSECOND e CENTURY.
Nota che negli anni bisestili e per le date a fine mese Snowflake applica gli adeguati aggiustamenti. Ad esempio, aggiungere un anno al 28 febbraio 2023 restituisce il 29 febbraio 2024 (anno bisestile).
Usare valori negativi per la sottrazione
La funzione DATEADD può anche sottrarre intervalli di tempo usando valori negativi:
-- Subtracting time intervals with negative valuesSELECT
DATEADD(MONTH,-3,'2023-03-15')AS three_months_ago,
DATEADD(DAY,-7,CURRENT_DATE())AS one_week_ago,
DATEADD(HOUR,-48,CURRENT_TIMESTAMP())AS two_days_ago_time;Offerto da
Spiegazione:
La prima espressione sottrae 3 mesi dal 15 marzo 2023
La seconda espressione sottrae 7 giorni dalla data di oggi
La terza espressione sottrae 48 ore (2 giorni) dal timestamp corrente
Output:
THREE_MONTHS_AGO ONE_WEEK_AGO TWO_DAYS_AGO_TIME
---------------- ------------ -----------------2025-02-102025-05-032025-05-0807:22:30.183-0700Offerto da
Comportamento del tipo di ritorno
Il tipo di ritorno di DATEADD dipende dal tipo di espressione in input:
Applicata a un DATE, restituisce un DATE
Applicata a un TIMESTAMP, restituisce un TIMESTAMP
Applicata a un TIME, restituisce un TIME
DATEADD preserva il tipo di dato originale dell'input. Questo comportamento è importante perché influenza come potrai usare il risultato nelle operazioni successive.
Ad esempio, se aggiungi ore a un valore DATE, il risultato sarà ancora un DATE (quindi la parte oraria viene troncata), mentre aggiungendo ore a un TIMESTAMP manterrai sia la data che l'ora.
Comprendere questi parametri e comportamenti di base di DATEADD ti darà le fondamenta per i casi d'uso più avanzati che esploreremo nelle sezioni successive.
Esempi pratici di DATEADD e casi d'uso
Ora che abbiamo compreso sintassi e comportamento di DATEADD, esploriamo applicazioni pratiche usando i nostri dati di esempio. In questa sezione mostreremo come DATEADD può risolvere problemi di business reali e potenziare le capacità di analisi dei dati.
Calcolare le date di rinnovo degli abbonamenti
Un'esigenza comune è determinare quando gli abbonamenti si rinnoveranno in base al ciclo di fatturazione:
Spiegazione: questa query calcola la prima data di rinnovo per ogni abbonamento in base al ciclo di fatturazione. Usiamo DATEADD con diverse parti di data (MONTH o YEAR) e valori (1, 3 o 1) a seconda del ciclo.
Output:
Nota come Snowflake gestisce correttamente la transizione dal 28 febbraio al 28 febbraio (anno bisestile).
Prevedere le finestre di consegna
Usiamo DATEADD per calcolare finestre di consegna stimate per gli ordini:
-- Calculate delivery windows based on order timestampsSELECT
order_id,
customer_id,
order_timestamp,
delivery_estimate,
DATEADD(HOUR,-12, delivery_estimate)AS delivery_window_start,
delivery_estimate AS delivery_window_end,
DATEDIFF('HOUR', order_timestamp, delivery_estimate)AS estimated_hours_to_delivery
FROM orders
ORDERBY order_id;Offerto da
Spiegazione: questa query:
Crea una finestra di consegna di 12 ore sottraendo 12 ore dal tempo di consegna stimato
Mostra sia l'inizio che la fine della finestra di consegna
Calcola il tempo totale stimato alla consegna in ore
Output:
Creare una tabella dimensione date
L'analisi di serie temporali richiede spesso una tabella dimensione date. Creiamone una usando DATEADD:
-- Generate a date dimension table for analysisWITH date_dimension AS(SELECT
DATEADD(DAY, seq4(),'2023-01-01')AS calendar_date
FROMTABLE(GENERATOR(ROWCOUNT=>365)))SELECT
calendar_date,YEAR(calendar_date)ASyear,MONTH(calendar_date)ASmonth,
MONTHNAME(calendar_date)AS month_name,DAY(calendar_date)ASday,
DAYOFWEEK(calendar_date)AS day_of_week,
DAYNAME(calendar_date)AS day_name,CASEWHEN DAYOFWEEK(calendar_date)IN(0,6)THENTRUEELSEFALSEENDAS is_weekend,
QUARTER(calendar_date)AS quarter
FROM date_dimension
WHERE calendar_date <='2023-03-31'ORDERBY calendar_date
LIMIT10;Offerto da
Spiegazione: questa query:
Usa DATEADD con un generatore di sequenze per creare una serie di date per il 2023
Estrae attributi di data utili per ogni data di calendario
Filtra al Q1 2023 e mostra i primi 10 giorni per brevità
Output:
Le tabelle dimensione date migliorano notevolmente le performance analitiche pre-calcolando attributi di data invece di computarli ripetutamente nelle query. Standardizzano la logica sulle date in tutta l'organizzazione, garantendo definizioni coerenti di trimestri, weekend e altri periodi di tempo.
Questo approccio riduce gli errori e rende più accessibili analisi complesse basate sul tempo per gli utenti di business. Le dimensioni date consentono anche filtri e raggruppamenti efficienti per varie gerarchie temporali come anno, trimestre, mese e giorno.
La funzione DATEADD con generazione di sequenze offre un metodo semplice per popolare queste tabelle di dimensione senza inserimenti manuali.
Questa tecnica può essere estesa per creare calendari multi-annuali o dimensioni temporali specializzate come calendari fiscali o calcoli dei giorni lavorativi. Colonne aggiuntive potrebbero includere flag per festività, numeri di settimana o periodi business personalizzati, fondamentali per report accurati.
Una volta creata, questa tabella dimensione può essere unita a tabelle dei fatti per abilitare potenti capacità di time intelligence in dashboard e report.
Analizzare eventi pianificati
Usiamo DATEADD per analizzare prossimi interventi di manutenzione pianificati:
-- Find upcoming events and calculate preparation timeSELECT
event_id,
event_name,
event_timestamp,
duration_minutes,
DATEADD(DAY,-3, event_timestamp)AS preparation_start,
DATEADD(MINUTE, duration_minutes, event_timestamp)AS event_end,
DATEDIFF('MINUTE',CURRENT_TIMESTAMP(), event_timestamp)AS minutes_until_event
FROM events
WHERE event_timestamp >CURRENT_TIMESTAMP()ORDERBY event_timestamp;Offerto da
Spiegazione: questa query:
Trova gli eventi in arrivo (quelli nel futuro)
Calcola quando iniziare la preparazione (3 giorni prima dell'evento)
Calcola quando finirà l'evento in base alla sua durata
Mostra quanti minuti mancano all'inizio dell'evento
Poiché tutti i nostri dati di esempio sono del 2023, questa query in genere non mostrerà risultati nel 2025, ma dimostra concettualmente come analizzare eventi pianificati.
Calcolare i periodi di fatturazione
Per le aziende in abbonamento, calcolare periodi di fatturazione precisi è essenziale:
-- Generate next 6 billing periods for monthly subscriptionsWITH billing_periods AS(SELECT
subscription_id,
customer_id,
plan_name,
start_date,
seq AS billing_period_number,
DATEADD(MONTH, seq, start_date)AS billing_period_start,
DATEADD(DAY,-1, DATEADD(MONTH, seq +1, start_date))AS billing_period_end
FROM subscriptions
CROSSJOIN(SELECT seq4()AS seq FROMTABLE(GENERATOR(ROWCOUNT=>6)))WHERE billing_cycle ='Monthly')SELECT
subscription_id,
customer_id,
plan_name,
billing_period_number,
billing_period_start,
billing_period_end,
DATEDIFF('DAY', billing_period_start, billing_period_end)+1AS days_in_period
FROM billing_periods
ORDERBY subscription_id, billing_period_number;Offerto da
Spiegazione: questa query:
Genera i prossimi 6 periodi di fatturazione per gli abbonamenti mensili usando un CROSS JOIN con un generatore di sequenze (seq4())
Calcola la data di inizio aggiungendo mesi in base al numero del periodo con DATEADD(MONTH, seq, start_date)
Calcola la data di fine come un giorno prima dell'inizio del periodo successivo con DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date))Questo garantisce una corretta gestione delle diverse lunghezze dei mesi (28/29/30/31 giorni)
Conta i giorni in ciascun periodo con DATEDIFF('DAY', billing_period_start, billing_period_end) + 1Il +1 è necessario perché DATEDIFF restituisce la differenza tra le date, senza includere la data finale
Filtra per includere solo gli abbonamenti mensili con la clausola WHERE
Ordina i risultati per subscription_id e numero di periodo per una presentazione logica
Output:
Nota come DATEADD gestisce correttamente le diverse lunghezze dei mesi, garantendo calcoli accurati dei periodi di fatturazione.
Questi esempi mostrano come DATEADD possa essere applicata per risolvere problemi comuni di business che coinvolgono la manipolazione delle date. Combinando DATEADD con altre funzioni SQL, puoi creare query potenti per analisi e processi basati sul tempo in Snowflake.
Confrontare DATEADD con funzioni correlate di Snowflake
Vediamo ora come la funzione DATEADD si confronta con altre funzioni di Snowflake.
DATEADD vs DATEDIFF e DATE_TRUNC
Mentre DATEADD aggiunge o sottrae un intervallo di tempo specifico a una data, DATEDIFF calcola la differenza tra due date in un'unità specificata. DATEDIFF restituisce un intero che rappresenta il numero di unità complete tra le date, rendendola ideale per calcolare durate come la lunghezza degli abbonamenti o i giorni trascorsi dall'inoltro di un ordine.
DATE_TRUNC, al contrario, rimuove precisione da un valore di data/ora impostando le parti più piccole ai valori predefiniti, arrotondando di fatto verso il basso a un'unità specificata.
-- Comparing the three functionsSELECT
DATEADD(MONTH,3,'2023-01-15'::DATE)AS added_three_months,
DATEDIFF(DAY,'2023-01-15'::DATE,'2023-04-15'::DATE)AS days_between,
DATE_TRUNC(MONTH,'2023-01-15'::DATE)AS truncated_to_month;Offerto da
Output:
Quando usare ciascuna funzione (criteri decisionali)
Usa DATEADD quando devi spostare date avanti o indietro di intervalli specifici, ad esempio calcolare date di rinnovo future, finestre di consegna o scadenze di pagamento.
Scegli DATEDIFF quando misuri il tempo trascorso tra due date, come calcolare età, durata o metriche basate sul tempo per la reportistica.
DATE_TRUNC è più adatta quando devi raggruppare dati per periodi (giornalieri, mensili, trimestrali), standardizzare i timestamp a un livello di precisione coerente o creare gerarchie temporali per l'analisi.
-- Function usage by scenarioSELECT-- Scenario: Calculate next month's billing date
DATEADD(MONTH,1, start_date)AS next_billing_date,-- Scenario: Find how many days the subscription has been active
DATEDIFF(DAY, start_date,CURRENT_DATE())AS subscription_age_days,-- Scenario: Group by month for analysis
DATE_TRUNC(MONTH, start_date)AS billing_month
FROM subscriptions
LIMIT3;Offerto da
Gestione dei casi limite e troubleshooting
Se riscontri problemi nell'uso della funzione, ecco alcuni suggerimenti che possono aiutarti a uscirne.
Adeguamenti di fine mese e anni bisestili
Snowflake gestisce in modo intelligente le date di fine mese quando si usa DATEADD. Quando aggiungi mesi a una data a fine mese, Snowflake restituisce l'ultimo giorno del mese risultante, indipendentemente dal numero di giorni. Questo comportamento preserva il concetto di "fine mese" anche quando i mesi hanno lunghezze diverse.
-- Month-end handling examplesSELECT
DATEADD(MONTH,1,'2023-01-31')AS jan_to_feb,-- January 31 + 1 month = February 28
DATEADD(MONTH,1,'2023-02-28')AS feb_to_mar,-- February 28 + 1 month = March 31
DATEADD(MONTH,1,'2024-01-31')AS jan_to_feb_leap,-- January 31 + 1 month in leap year = February 29
DATEADD(YEAR,1,'2023-02-28')AS normal_to_leap;-- February 28, 2023 + 1 year = February 29, 2024Offerto da
Fusi orari e considerazioni sull'ora legale
Quando lavori con dati timestamp che includono fusi orari (TIMESTAMP_TZ), DATEADD tiene automaticamente conto delle transizioni dell'ora legale. Ciò assicura calcoli accurati durante i cambi d'ora, ma può a volte produrre risultati inattesi quando si aggiungono intervalli specifici attorno ai confini dell'ora legale.
-- Time zone handling with DST transitionSELECT
event_timestamp,
DATEADD(HOUR,24, event_timestamp)AS add_24h,
DATEADD(DAY,1, event_timestamp)AS add_1d
FROM(SELECT CONVERT_TIMEZONE('America/Los_Angeles','2023-03-12 01:30:00')::TIMESTAMP_TZ AS event_timestamp
);-- During spring forward DST transitionOfferto da
Quando lavori con timestamp attorno alle transizioni dell'ora legale, sappi che aggiungere 24 ore potrebbe non equivalere ad aggiungere 1 giorno. L'approccio “add_1d" in genere produce risultati più intuitivi nelle applicazioni business.
Errori comuni e soluzioni
Gli errori di DATEADD derivano tipicamente da incongruenze di tipo o input non validi. Ecco problemi comuni e soluzioni:
-- Common error: Invalid date part-- Error: "Invalid date part 'DATE'"SELECT DATEADD(DATE,1,'2023-01-15');-- Incorrect: 'DATE' is not a valid date partSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use 'DAY' instead-- Common error: Type mismatch-- Error: "Numeric value 'abc' is not recognized"SELECT DATEADD(DAY,'abc','2023-01-15');-- Incorrect: second parameter must be numericSELECT DATEADD(DAY,10,'2023-01-15');-- Correct: use numeric value-- Common error: Invalid date format-- Error: "Date 'January 15, 2023' is not recognized"SELECT DATEADD(DAY,1,'January 15, 2023');-- Incorrect: unrecognized date formatSELECT DATEADD(DAY,1,'2023-01-15');-- Correct: use YYYY-MM-DD formatOfferto da
Suggerimenti per l'ottimizzazione delle performance
Per le migliori performance quando usi DATEADD in operazioni su larga scala:
Applica DATEADD nelle fasi di trasformazione piuttosto che di filtro quando possibile.
Pre-calcola calcoli di data comuni in tabelle temporanee o CTE quando usati più volte.
Considera l'uso di DATE_TRUNC prima di DATEADD per calcoli basati su range per migliorare l'uso degli indici.
Per operazioni batch come generare intervalli di date, usa generatori di sequenze (come mostrato nell'esempio della dimensione date) anziché CTE ricorsive.
-- Inefficient pattern (calculating same value repeatedly)SELECT*FROM large_table
WHERE DATEADD(MONTH,1, event_date)<CURRENT_DATE();-- More efficient approach (calculate once)WITH calc_dates AS(SELECT*, DATEADD(MONTH,1, event_date)AS next_month_date
FROM large_table
)SELECT*FROM calc_dates
WHERE next_month_date <CURRENT_DATE();Offerto da
Comprendere questi casi limite e le tecniche di ottimizzazione ti aiuterà a scrivere logiche di manipolazione delle date più robuste in Snowflake, evitando trappole comuni e massimizzando le performance.
Conclusione
La funzione DATEADD di Snowflake è uno strumento essenziale per la manipolazione delle date che consente ai professionisti dei dati di eseguire aritmetica temporale su varie parti di data. Gestisce date di fine mese, anni bisestili, fusi orari e transizioni dell'ora legale con un comportamento prevedibile. Abbiamo visto come DATEADD si applichi alla gestione degli abbonamenti, al tracciamento delle consegne, alla creazione di dimensioni date e ai calcoli di fatturazione. Usata insieme a DATEDIFF e DATE_TRUNC, diventa un componente chiave per le analisi basate sul tempo in Snowflake.
La funzione DATEADD di Snowflake viene usata per eseguire operazioni di aritmetica sulle date aggiungendo o sottraendo intervalli di tempo specifici (come giorni, mesi o anni) da valori di data, ora o timestamp. È comunemente usata per calcolare date future, rinnovi di abbonamenti e analisi di serie temporali.
Come gestisce DATEADD le date di fine mese e gli anni bisestili?⌄
DATEADD gestisce in modo intelligente le date di fine mese preservando il concetto di "fine mese". Quando aggiungi mesi a una data a fine mese, restituisce l'ultimo giorno del mese risultante. Per gli anni bisestili, regola automaticamente le date di conseguenza (ad es., aggiungendo un anno al 28 febbraio 2023, si ottiene il 29 febbraio 2024).
Quali sono le parti di data supportate in DATEADD?⌄
DATEADD supporta varie parti di data tra cui YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND e CENTURY. Ogni parte consente di aggiungere o sottrarre quella specifica unità di tempo da un valore di data.
Si può usare DATEADD con diversi tipi di timestamp?⌄
Sì, DATEADD funziona con tutti i tipi di timestamp di Snowflake: TIMESTAMP_NTZ (senza fuso orario), TIMESTAMP_TZ (con fuso orario) e TIMESTAMP_LTZ (fuso orario locale). Preserva il tipo di timestamp e gestisce automaticamente le conversioni di fuso orario.
In cosa differisce DATEADD da DATEDIFF e DATE_TRUNC?⌄
Mentre DATEADD modifica le date aggiungendo o sottraendo intervalli di tempo, DATEDIFF calcola la differenza tra due date in un'unità specificata e DATE_TRUNC rimuove precisione da un valore di data/ora arrotondando verso il basso a un'unità specificata. Servono a scopi diversi ma complementari nella manipolazione delle date.
Sono un creator di contenuti sulla data science con oltre 2 anni di esperienza e uno dei più seguiti su Medium. Mi piace scrivere articoli dettagliati su AI e ML con un pizzico di sarcasmo, perché bisogna pur fare qualcosa per renderli un po’ meno noiosi. Ho pubblicato oltre 130 articoli e un corso su DataCamp, con un altro in arrivo. I miei contenuti sono stati visti da oltre 5 milioni di persone, 20.000 delle quali sono diventate follower sia su Medium che su LinkedIn.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Fai un po' di pratica con Snowflake! Impara a interrogare, modellare e gestire i dati in questa introduzione interattiva per ingegneri dei dati, analisti e professionisti della BI.
Impara a progettare, interrogare e costruire in Snowflake: diventa un esperto di Snowflake SQL per la trasformazione e la modellazione e preparati a diventare un Data Engineer pronto per il mondo del lavoro.
La funzione
DATEADDdi Snowflake è un metodo relativamente semplice ma potente per eseguire qualsiasi tipo di aritmetica sulle date: permette ai professionisti dei dati di aggiungere o sottrarre un intervallo di tempo specifico da un valore di data, ora o timestamp.Capire come usare
DATEADDti consentirà, come data analyst e/o ingegnere, di eseguire analisi utili calcolando periodi di abbonamento, costruendo proiezioni per qualsiasi data futura e persino generando dataset di serie temporali per ulteriori analisi.In questo tutorial imparerai la sintassi della funzione, come applicarla nella pratica e il potenziale complessivo di
DATEADDnel tuo arsenale di manipolazione delle date in Snowflake SQL.Se stai iniziando ora con Snowflake, dai un'occhiata al nostro percorso di competenze Snowflake Foundations.
Configurare un database di esempio per fare pratica
Prima di entrare nei dettagli di
DATEADD, creiamo un database di esempio ricco di date per rendere i nostri esempi più pratici e hands-on. Lavorare con dati reali aiuterà a fissare i concetti mentre impariamo le capacità della funzione.1. Creare un account Snowflake (per nuovi utenti)
Se sei nuovo su Snowflake, devi creare un account di prova gratuito che fornisce crediti per 30 giorni. Per un'introduzione completa alla piattaforma, consulta il corso Introduction to Snowflake, che copre le basi e i fondamenti.
2. Impostare il tuo worksheet
In Snowflake, le query SQL vengono eseguite nei “Worksheets” (simili ai notebook). Per creare un nuovo worksheet:
Se sei completamente alle prime armi con l'interfaccia di Snowflake, questo Snowflake Tutorial For Beginners offre una guida utile alla piattaforma.
3. Scegliere un database e uno schema
Per questo tutorial useremo il database Snowflake Learning e lo schema public:
4. Generare dati sintetici e tabelle
Creeremo tre tabelle con dati relativi alle date per dimostrare ‘DATEADD’ in vari scenari:
Nota: Usa “Command + Shift + Enter”/”Ctrl + Shift + Enter” per eseguire tutti i seguenti comandi in una volta nel tuo worksheet:
Per maggiori dettagli sulla creazione delle tabelle, inclusi diversi tipi di tabelle e best practice, fai riferimento a Creating Tables in Snowflake.
Suggerimento: Dopo l'esecuzione corretta, elimina tutte le query esistenti dal tuo worksheet.
5. Popolare le tabelle con dati di esempio
Inseriamo dati di esempio con una varietà di valori di data e ora:
6. Convalidare i dati di esempio
Eseguiamo alcune query di base per verificare che i dati siano stati caricati correttamente:
Ora abbiamo un database di esempio funzionante con tre tabelle che contengono diversi formati di date e timestamp. Questo dataset sarà la base per esplorare la funzione
DATEADDnel resto del tutorial.Capire Snowflake DATEADD: sintassi e parametri
La funzione
DATEADDè fondamentale per le operazioni di aritmetica sulle date in Snowflake. Ti consente di aggiungere o sottrarre intervalli di tempo specifici da valori di data, ora o timestamp. Vediamo come funziona, partendo da sintassi e parametri.Sintassi e parametri della funzione
La sintassi di base di
DATEADDè:Esaminiamo ciascun parametro:
Spiegazione: questa query aggiunge 3 mesi al 15 gennaio 2023. I parametri funzionano così:
date_part (MONTH): specifica l'unità di tempo che stiamo aggiungendo o sottraendovalue (3): il numero di unità da aggiungere (positivo) o sottrarre (negativo)date_or_timestamp_expression('2023-01-15'): la data di partenza da modificareOutput:
Parti di data supportate
Snowflake supporta diverse parti di data utilizzabili con
DATEADD:Ulteriori parti di data supportate includono
MILLISECOND,MICROSECOND,NANOSECONDeCENTURY.Nota che negli anni bisestili e per le date a fine mese Snowflake applica gli adeguati aggiustamenti. Ad esempio, aggiungere un anno al 28 febbraio 2023 restituisce il 29 febbraio 2024 (anno bisestile).
Usare valori negativi per la sottrazione
La funzione
DATEADDpuò anche sottrarre intervalli di tempo usando valori negativi:Spiegazione:
Output:
Comportamento del tipo di ritorno
Il tipo di ritorno di
DATEADDdipende dal tipo di espressione in input:DATE, restituisce unDATETIMESTAMP, restituisce unTIMESTAMPTIME, restituisce unTIMEDATEADDpreserva il tipo di dato originale dell'input. Questo comportamento è importante perché influenza come potrai usare il risultato nelle operazioni successive.Ad esempio, se aggiungi ore a un valore DATE, il risultato sarà ancora un DATE (quindi la parte oraria viene troncata), mentre aggiungendo ore a un
TIMESTAMPmanterrai sia la data che l'ora.Comprendere questi parametri e comportamenti di base di
DATEADDti darà le fondamenta per i casi d'uso più avanzati che esploreremo nelle sezioni successive.Esempi pratici di DATEADD e casi d'uso
Ora che abbiamo compreso sintassi e comportamento di
DATEADD, esploriamo applicazioni pratiche usando i nostri dati di esempio. In questa sezione mostreremo comeDATEADDpuò risolvere problemi di business reali e potenziare le capacità di analisi dei dati.Calcolare le date di rinnovo degli abbonamenti
Un'esigenza comune è determinare quando gli abbonamenti si rinnoveranno in base al ciclo di fatturazione:
Spiegazione: questa query calcola la prima data di rinnovo per ogni abbonamento in base al ciclo di fatturazione. Usiamo
DATEADDcon diverse parti di data (MONTHoYEAR) e valori (1, 3 o 1) a seconda del ciclo.Output:
Nota come Snowflake gestisce correttamente la transizione dal 28 febbraio al 28 febbraio (anno bisestile).
Prevedere le finestre di consegna
Usiamo DATEADD per calcolare finestre di consegna stimate per gli ordini:
Spiegazione: questa query:
Output:
Creare una tabella dimensione date
L'analisi di serie temporali richiede spesso una tabella dimensione date. Creiamone una usando DATEADD:
Spiegazione: questa query:
DATEADDcon un generatore di sequenze per creare una serie di date per il 2023Output:
Le tabelle dimensione date migliorano notevolmente le performance analitiche pre-calcolando attributi di data invece di computarli ripetutamente nelle query. Standardizzano la logica sulle date in tutta l'organizzazione, garantendo definizioni coerenti di trimestri, weekend e altri periodi di tempo.
Questo approccio riduce gli errori e rende più accessibili analisi complesse basate sul tempo per gli utenti di business. Le dimensioni date consentono anche filtri e raggruppamenti efficienti per varie gerarchie temporali come anno, trimestre, mese e giorno.
La funzione
DATEADDcon generazione di sequenze offre un metodo semplice per popolare queste tabelle di dimensione senza inserimenti manuali.Questa tecnica può essere estesa per creare calendari multi-annuali o dimensioni temporali specializzate come calendari fiscali o calcoli dei giorni lavorativi. Colonne aggiuntive potrebbero includere flag per festività, numeri di settimana o periodi business personalizzati, fondamentali per report accurati.
Una volta creata, questa tabella dimensione può essere unita a tabelle dei fatti per abilitare potenti capacità di time intelligence in dashboard e report.
Analizzare eventi pianificati
Usiamo
DATEADDper analizzare prossimi interventi di manutenzione pianificati:Spiegazione: questa query:
Poiché tutti i nostri dati di esempio sono del 2023, questa query in genere non mostrerà risultati nel 2025, ma dimostra concettualmente come analizzare eventi pianificati.
Calcolare i periodi di fatturazione
Per le aziende in abbonamento, calcolare periodi di fatturazione precisi è essenziale:
Spiegazione: questa query:
seq4())DATEADD(MONTH, seq, start_date)DATEADD(DAY, -1, DATEADD(MONTH, seq + 1, start_date))Questo garantisce una corretta gestione delle diverse lunghezze dei mesi (28/29/30/31 giorni)DATEDIFF('DAY', billing_period_start, billing_period_end) + 1Il +1 è necessario perché DATEDIFF restituisce la differenza tra le date, senza includere la data finalesubscription_ide numero di periodo per una presentazione logicaOutput:
Nota come
DATEADDgestisce correttamente le diverse lunghezze dei mesi, garantendo calcoli accurati dei periodi di fatturazione.Questi esempi mostrano come
DATEADDpossa essere applicata per risolvere problemi comuni di business che coinvolgono la manipolazione delle date. CombinandoDATEADDcon altre funzioni SQL, puoi creare query potenti per analisi e processi basati sul tempo in Snowflake.Confrontare DATEADD con funzioni correlate di Snowflake
Vediamo ora come la funzione
DATEADDsi confronta con altre funzioni di Snowflake.DATEADD vs DATEDIFF e DATE_TRUNC
Mentre
DATEADDaggiunge o sottrae un intervallo di tempo specifico a una data,DATEDIFFcalcola la differenza tra due date in un'unità specificata.DATEDIFFrestituisce un intero che rappresenta il numero di unità complete tra le date, rendendola ideale per calcolare durate come la lunghezza degli abbonamenti o i giorni trascorsi dall'inoltro di un ordine.DATE_TRUNC, al contrario, rimuove precisione da un valore di data/ora impostando le parti più piccole ai valori predefiniti, arrotondando di fatto verso il basso a un'unità specificata.Output:
Quando usare ciascuna funzione (criteri decisionali)
Usa
DATEADDquando devi spostare date avanti o indietro di intervalli specifici, ad esempio calcolare date di rinnovo future, finestre di consegna o scadenze di pagamento.Scegli
DATEDIFFquando misuri il tempo trascorso tra due date, come calcolare età, durata o metriche basate sul tempo per la reportistica.DATE_TRUNCè più adatta quando devi raggruppare dati per periodi (giornalieri, mensili, trimestrali), standardizzare i timestamp a un livello di precisione coerente o creare gerarchie temporali per l'analisi.Gestione dei casi limite e troubleshooting
Se riscontri problemi nell'uso della funzione, ecco alcuni suggerimenti che possono aiutarti a uscirne.
Adeguamenti di fine mese e anni bisestili
Snowflake gestisce in modo intelligente le date di fine mese quando si usa
DATEADD. Quando aggiungi mesi a una data a fine mese, Snowflake restituisce l'ultimo giorno del mese risultante, indipendentemente dal numero di giorni. Questo comportamento preserva il concetto di "fine mese" anche quando i mesi hanno lunghezze diverse.Fusi orari e considerazioni sull'ora legale
Quando lavori con dati timestamp che includono fusi orari (
TIMESTAMP_TZ), DATEADD tiene automaticamente conto delle transizioni dell'ora legale. Ciò assicura calcoli accurati durante i cambi d'ora, ma può a volte produrre risultati inattesi quando si aggiungono intervalli specifici attorno ai confini dell'ora legale.Quando lavori con timestamp attorno alle transizioni dell'ora legale, sappi che aggiungere 24 ore potrebbe non equivalere ad aggiungere 1 giorno. L'approccio “add_1d" in genere produce risultati più intuitivi nelle applicazioni business.
Errori comuni e soluzioni
Gli errori di DATEADD derivano tipicamente da incongruenze di tipo o input non validi. Ecco problemi comuni e soluzioni:
Suggerimenti per l'ottimizzazione delle performance
Per le migliori performance quando usi
DATEADDin operazioni su larga scala:DATEADDnelle fasi di trasformazione piuttosto che di filtro quando possibile.DATEADDper calcoli basati su range per migliorare l'uso degli indici.Comprendere questi casi limite e le tecniche di ottimizzazione ti aiuterà a scrivere logiche di manipolazione delle date più robuste in Snowflake, evitando trappole comuni e massimizzando le performance.
Conclusione
La funzione
DATEADDdi Snowflake è uno strumento essenziale per la manipolazione delle date che consente ai professionisti dei dati di eseguire aritmetica temporale su varie parti di data. Gestisce date di fine mese, anni bisestili, fusi orari e transizioni dell'ora legale con un comportamento prevedibile. Abbiamo visto comeDATEADDsi applichi alla gestione degli abbonamenti, al tracciamento delle consegne, alla creazione di dimensioni date e ai calcoli di fatturazione. Usata insieme aDATEDIFFeDATE_TRUNC, diventa un componente chiave per le analisi basate sul tempo in Snowflake.Per approfondire Snowflake, dai un'occhiata al Snowflake Foundations skill track o esplora Creating Tables in Snowflake per sviluppare le tue competenze di data modeling. La guida Using Snowflake Time Travel completa la tua comprensione delle operazioni temporali. I principianti possono iniziare con lo Snowflake Tutorial for Beginners.