|
OGŁASZ @dt datę USTAW @dt=GETDATE() DEKLARUJ @number INT SET @number=3 --1. Określ datę pierwszego lub ostatniego dnia roku --A. Pierwszy dzień roku SELECT Co nVERT(char(5),@dt,120)+ '1-1' --B. Ostatni dzień roku SELECT Co nVERT(char(5),@dt,120)+ '12-31' --2. Pierwszy lub ostatni dzień kwartału, w którym znajduje się podana data --A. Pierwszy dzień kwartału SELECT Co nVERT(datetime, Co nVERT(char(8), DATEADD(Kilka razy, DATEPART(Ćwierćdolarówka,@dt)*3-miesiąc nth(@dt)-2, @dt), 120)+ '1 ')
--B. Ostatni dzień kwartału (wyrok SPRAWY) SELECT Co nVERT(datetime, Co nVERT(char(8), DATEADD(Kilka razy, DATEPART (Ćwierćdolarówka, @dt)*3-miesiąc nth(@dt), @dt), 120) +PRZYPADEK, GDY DATEPART(Kwartał,@dt) w(1,4) POTEM '31 'ELSE '30' KONIEC) --C. Ostatni dzień kwartału (algorytm bezpośredniego pushu) WYBIERZ DATEADD(Dzień,-1, Co nVERT(char(8), DATEADD(Kilka razy, 1+DATEPART(Ćwierćdolarówka,@dt)*3-miesiąc n-ty(@dt), @dt), 120)+ '1 ') --3. Pierwszy lub ostatni dzień miesiąca, w którym znajduje się podana data --A. Pierwszy dzień miesiąca SELECT Co nVERT(datetime,Co nVERT(char(8),@dt,120)+ '1 ')
--B. Ostatni dzień miesiąca SELECT DATEADD(Day,-1,Co nVERT(char(8),DATEADD(Mo nth,1,@dt),120)+ '1 ') --C. Ostatni dzień miesiąca (łatwa do użycia zła metoda) WYBIERZ DATEADD(Mo nth,1,DATEADD(Day,-DAY(@dt),@dt)) --4. Dowolny dzień tygodnia, w którym wyznaczona data jest WYBIERZ DATEADD(Dzień,@number-DATEPART(Dzień powszednie,@dt,@dt)
--5. Każdy dzień tygodnia, w którym wyznaczona data jest --A. Niedziela jako pierwszy dzień tygodnia WYBIERZ DATEADD(Dzień,@number-(DATEPART(Dzień powszednie,@dt)+@@DATEFIRST-1)%7,@dt)
--B. Poniedziałek to pierwszy dzień tygodnia WYBIERZ DATEADD(Dzień,@number-(DATEPART(Dzień roboczy,@dt)+@@DATEFIRST-2)%7-1,@dt)
|