A me è capitato di avere la necessità di determinare in fase di esecuzione di una stored procedure, l'ultimo giorno del mese antecedente alla data della richiesta, così anche se sembra assurdo, ho dovuto inventare questa stored che passato un mese in forma numerica, restituisce in un parametro di output l'ultimo giorno del mese precedente. Qualora il parametro del mese non fosse passato vuoto la stored assume per impostazione predefinita il mese corrente.
CREATE PROCEDURE sp_GetLastDayPrevMonth(@MYMONTH CHAR(2), @LAST_DAY CHAR(2) OUTPUT) AS
IF (@MYMONTH = '')
SET @LAST_DAY = DAY(DATEADD(DD, -1,CONVERT(CHAR(6), GETDATE(),112)+'01'))
ELSE
SET @LAST_DAY = CONVERT(CHAR(2),
DAY(CONVERT(SMALLDATETIME ,
DATEADD(DD,-1,CONVERT(VARCHAR(4),YEAR(GETDATE())) + RIGHT('00'+@MYMONTH,2)+ '01'),112)))