|
DICHIARA @dt data SET @dt=GETDATE() DECLARE @number int SET @number=3 --1. Specificare la data del primo o dell'ultimo giorno dell'anno --A. Il primo giorno dell'anno SELECT Co nVERT(char(5),@dt,120)+ '1-1' --B. L'ultimo giorno dell'anno SELECT Co nVERT(char(5),@dt,120)+ '12-31' --2. Il primo o l'ultimo giorno del trimestre in cui si trova la data specificata --A. Primo giorno del trimestre SELECT Co nVERT(datetime, Co nVERT(char(8), DATEADD(Mo nth, DATEPART(Quarter,@dt)*3-Mo nth(@dt)-2, @dt), 120)+ '1 ')
--B. Ultimo giorno del trimestre (sentenza CASE) SELECT Co nVERT(datetime, Co nVERT(char(8), DATEADD(Mo nth, DATEPART(Quarter,@dt)*3-Month nth(@dt), @dt), 120) +CASO QUANDO DATEPART(Quarter,@dt) in(1,4) POI '31 'ELSE '30' FINE) --C. Ultimo giorno del trimestre (algoritmo di spinta diretta) SELEZIONA LA DATA AGGIUNGI(Giorno,-1, Co nVERT(char(8), DATEADD(Mo nth, 1+DATEPART(Quarter,@dt)*3-Mo nth(@dt), @dt), 120)+ '1 ') --3. Il primo o l'ultimo giorno del mese in cui si trova la data specificata --A. Il primo giorno del mese SELECT Co nVERT(datetime,Co nVERT(char(8),@dt,120)+ '1 ')
--B. L'ultimo giorno del mese SELECT DATEADD(Day,-1,Co nVERT(char(8),DATEADD(Mo nth,1,@dt),120)+ '1 ') --C. Ultimo giorno del mese (facile da usare, metodo sbagliato) SELECT DATEADD(Mo nth,1,DATEADD(Day,-DAY(@dt),@dt)) --4. Qualsiasi giorno della settimana in cui si trova la data specificata SELEZIONA DATEADD(Giorno,@number-DATAPARTE(Giorno feriale,@dt),@dt)
--5. Qualsiasi giorno della settimana in cui si trova la data specificata --Un. Domenica come primo giorno della settimana SELEZIONA DATEADD(Giorno,@number-(DATAPART(Giorno feriale,@dt)+@@DATEFIRST-1)%7,@dt)
--B. Il lunedì è il primo giorno della settimana SELEZIONA DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
|