poniedziałek, 30 sierpnia 2010

Określenie daty zakończenia miesiąca w SQL-u

Dziś pokażę jak określić koniec miesiąca dla dowolnej daty. Wykorzystam tu pewną sztuczkę związaną z dodawaniem dat za pomocą funkcji DATEADD oraz wyciąganiem części składowych za pomocą funkcji YEAR i MONTH.
declare @dstop as datetime
set @dstop = getdate()
set @dstop =  dateadd(d,-1,dateadd(mm,1,convert(datetime,cast(year(@dstop) as nvarchar(4)) + '-' + RIGHT('0' + cast(MONTH(@dstop) as nvarchar(4)),2) + '-01',120)))

select @dstop

Algorytm postępowania jest następujący:
Wyciągamy Rok i miesiąc i na podstawie tego sklejamy datę określającą pierwszy dzień miesiąca
dodajemy miesiąc do tak otrzymanej daty
dodajemy -1 dzień do otrzymanej wcześniej sumy

Inna metoda to:
declare @dstop datetime
set @dstop = getdate() + 1
set @dstop =  dateadd(d,-day(dateadd(m,1,@dstop)),dateadd(m,1,@dstop))

select @dstop
Sposób ten zaprezentował kolega Bartosz Ślepowroński w tym wątku

Z powodzeniem ten sposób można zastosować w innych dialektach SQL np. JET

Brak komentarzy:

Prześlij komentarz