2014/02/11

¿Como calcular el ultimo día del mes tomando una fecha determinada?

En algunas ocasiones nos pasan como parámetro una fecha, por ejemplo: 11/02/2014 y nosotros necesitamos saber cual es el ultimo día de ese mes en formato fecha (28/02/2014).
Aquí veremos dos formas de hacerlo, la primera es para todas las versiones de SQL Server inferiores a 2012 y la segunda es usando una nueva función de SQL Server 2012 llamada EOMONTH
Ejemplo 1: Previo a SQL Server 2012
DECLARE @Fecha Date
SET @Fecha = GetDate()
DECLARE @UltimoDiaDelMes Date
SET @UltimoDiaDelMes = DATEADD(DD,-1,
                                DATEADD(MM,1,
                                  CONVERT(DATE,
                                       CONVERT(CHAR(4),YEAR(@Fecha)) +
                                       RIGHT('0' + CONVERT(VARCHAR(2),MONTH(@Fecha)),2)
                                         + '01'
                                             )
                                       )
                               )
SELECT @UltimoDiaDelMes

El algoritmo es el siguiente: El único dato siempre verdadero de un mes es su primer día siempre es el 1, entonces lo que hacemos es convertir la fecha a 01 mes y año de lo que me pasaron. Luego a eso le sumamos un mes y le restamos un día.
Ejemplo 2: Usando SQL Server 2012 y la función EOMONTH
DECLARE @Fecha Date
SET @Fecha = GetDate()
DECLARE @UltimoDiaDelMes char(10)
SET @UltimoDiaDelMes = EOMONTH (@Fecha)
Select @UltimoDiaDelMes