MSSQL - 2005 - Come calcolare range di date variabili tramite semplici query
Un piccolo post per prendere appunti su come eseguire query con range di date "dinamiche" in MSSQL 2005
Vediamo di spiegare meglio la situazione.
- Il fatturato a montante dal primo dell'anno alla fine del mese precedente la data di estrazione, sia per l'anno in corso, sia per l'anno precedente.
- Il fatturato calcolato dal primo all'ultimo giorno del mese precedente a quello dell'estrazione, sia per l'anno in corso che per l'anno precedente.
- Il fatturato del mese in corso, per l'anno in corso e per l'anno precedente.
- Il fatturato a montante dal 01/01/2013 al 30/04/2013 e il fatturato a montante dal 01/01/2012 al 30/04/2012
- Il fatturato dal 01/04/2013 al 30/04/2013 e dal 01/04/2012 al 30/04/2012
- il fatturato calcolato dal 01/05/2013 al 21/05/2013 e dal 01/05/2012 al 21/05/2012
In pratica, per trovare:
- Il primo di gennaio, ovvero il primo giorno dell'anno in corso possiamo usare
- dateadd(month, datediff(month, 0,getdate())-month(getdate())+1,0) che restituisce la data del 01/01/2013
- L'ultimo giorno dell'anno in corso
- dateadd(month,datediff(month,0,getdate())+13-month(getdate()),-1) che restituisce la data del 31/12/2013
- Il primo giorno dell'anno precedente
- dateadd(year,-1,dateadd(month, datediff(month, 0,getdate())-month(getdate())+1,0)) che restituisce la data del 01/01/2012
- L'ultimo giorno dell'anno precedente
- dateadd(year,-1,dateadd(month,datediff(month,0,getdate())+13-month(getdate()),-1)) che restituisce la data del 31/12/2012
- Il primo giorno del mese precedente a quello dell'estrazione per l'anno in corso
- dateadd(month,datediff(month,0,getdate())-1,0) che restituisce la data del 01/03/2013
- L'ultimo giorno del mese precedente a quello dell'estrazione per l'anno in corso
- dateadd(month,datediff(month,0,getdate()),-1) che restituisce la data del 31/03/2013
- Il primo giorno del mese precedente a quello dell'estrazione per l'anno precedente
- dateadd(year,-1,dateadd(month,datediff(month,0,getdate())-1,0)) che restituisce la data del 01/03/2012
- L'ultimo giorno del mese precedente a quello dell'estrazione per l'anno precedente
- dateadd(year,-1,dateadd(month,datediff(month,0,getdate()),-1))
Si noti che l'utilizzo del comando DATEDIFF annidiato nella query serve in quanto restituisce una data nel formato dd-mm-yyyy 00:00:00.000. Se avessi usato il solo comando DATEADD, avrei avuto come risultato una data nel formato dd-mm-yyyy 15:45:26.985 (ovvero con il calcolo della data corretto, ma con l'ora esatta dell'estrazione). E questo potrebbe essere un problema, in quanto se l'estrazione è fatta alle 15.00.00.000 del pomeriggio, i dati registrati prima delle 15:00:00.000 del pomeriggio non sarebbero ricompresi nel risultato.
L'articolo è presente anche nel mio BLOG di SAP B1 a questo indirizzo
Nessun commento:
Posta un commento
Grazie per aver scritto.
Il tuo commento sarà pubblica appena approvato dall'amministratore del blog.