Para obtener el primer día del mes anterior a través de un query debemos escribir
SELECT CONVERT(VARCHAR(10),LTRIM(RTRIM(STR(DATEPART(YYYY,DATEADD(MM,-1,GETDATE()))))) + ‘-‘ +RIGHT(REPLICATE(‘0’,1)+LTRIM(RTRIM(STR(DATEPART(MM,DATEADD(MM,-1,GETDATE()))))),2) + ‘-‘ +’01’)
o de una manera aún más sencilla
SELECT DATEADD(month, DATEDIFF(month, 0, DATEADD(month, -1,GETDATE())), 0)
Saludos
O te puedes crear una funcion en la que le pases la fecha y el codigo te quedaria mas limpio
select dbo.PrimerDiaMesAnterior(getdate())
funcion:
CREATE FUNCTION dbo.PrimerDiaMesAnterior (@Fecha as datetime)
RETURNS datetime
AS
BEGIN
declare @d varchar(2),@m varchar(2),@a varchar(4), @FI varchar(50) ,@FcF varchar(50)
–//recupera el dia ctual
set @d=”01″
–//recupera el mes actual
set @m=month(@Fecha)
–//recupera el año actual
set @a=year(@Fecha)
–//Primer dia del Mes
set @FI=’01’ + ‘/’ + @m + ‘/’ + @a
set @FcF=cast(day(@FI)as varchar) + ‘/’ + cast(month(@FI)as varchar) + ‘/’ + cast(year(@FI)as varchar)
set @FcF= DATEADD(mm, -1, @FI)
return @FcF
END