Come lavorare con le date in sql

Molte volte ci si ritrova a fare i “conti” con le date e quindi con questo prontuario spero di fare chiarimenti su come si possono ottenere delle date di rifermento indietro eo avanti rispetto a oggi o a una determinata data.

Partiamo da alcune date riferite alla giornata odierna:

–Oggi
SELECT GETDATE()
–Ieri
SELECT DATEADD(d,-1,GETDATE())
–Domani
SELECT DATEADD(d,+1,GETDATE())

Ora vediamo dei giorni riferiti alla settimana corrente:

–Primo giorno della Settimana corrente
SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
–Ultimo giorno della Settimana corrente
SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),6)
–Primo giorno della Settimana precedente
SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0)
–Ultimo giorno della Settimana precedente
SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),6)

Riferiamoci ora al mese corrente:

–Primo giorno del Mese corrente
SELECT DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)
–Ultimo giorno del Mese corrente
SELECT DATEADD(ms,-
3,DATEADD(mm,0,DATEADD(mm,DATEDIFF(mm,0,GETDATE())+1,0)))
–Primo giorno del Mese precedente
SELECT DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))
–Ultimo giorno del Mese precedente
SELECT DATEADD(ms,-3,DATEADD(mm,0,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)))

Ed infine all’anno corrente:

–Primo giorno del anno corrente
SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
–Ultimo giorno del anno corrente
SELECT DATEADD(ms,-3,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0)))
–Primo giorno del anno precedente
SELECT DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
–Ultimo giorno del anno precedente
SELECT DATEADD(ms,-3,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)))

Ovviamente combinando  queste formule all’interno delle vostre query potete ottenere buoni risultati, ad esempio nel mio caso dovevo estrarre tutti i movimenti gestionali da oggi a 6 mesi indietro ma partendo sempre dal primo del mese, quindi se oggi è il 15/06/12 dovevo prendere tutti i movimenti dal 01/01/2012.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *