Las fechas es un factor importante a la hora de hacer nuestra selección de información de la base de datos. Para esto, frecuentemente, necesitamos el primer o último día de algún mes en específico para completar nuestro análisis. Para obtener el primer o último día de cada mes utilizamos las siguientes funciones.

DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)),@mydate),101) ,
'Último día del mes anterior'
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@mydate)-1),@mydate),101) AS Date_Value,
'Primer día del mes corriente' AS Date_Type
UNION
SELECT CONVERT(VARCHAR(25),@mydate,101) AS Date_Value, 'Hoy' AS Date_Type
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))),DATEADD(mm,1,@mydate)),101) ,
'Último día del mes corriente'
UNION
SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@mydate))-1),DATEADD(mm,1,@mydate)),101) ,
'Primer día del mes siguiente'
GO

El query anterior hace referencia a la fecha de hoy. De la misma manera se puede utilizar para cualquier otra fecha.

Para conseguir el último día del mes en las nuevas versiones de SQL Server podemos usar la función nativa EOMONTH. Por ejemplo:

DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()
SELECT EOMONTH ( @mydate, -1 ), 'Último día del mes anterior'
UNION
select EOMONTH( @mydate ), 'Último día del mes corriente'
UNION
SELECT EOMONTH( @mydate, 1 ),'Último día del mes siguiente'
GO

No olvides ver mis otras publicaciones populares sobre SQL: