martes, 24 de noviembre de 2009

Obtener el primer y último día de un mes en SQL Server

declare @d varchar(2),@m varchar(2),@a varchar(4), @FE varchar(50) , @FI varchar(50) , @FN varchar(50),@FcF varchar(50)
--//recupera el dia ctual
set @d=day(getdate())
--//recupera el mes actual
set @m=month(getdate())
--//recupera el año actual
set @a=year(getdate())
--//fecha dada por el sistema
set @FE=@d + '/' + @m + '/' + @a
--//Primer dia del Mes
set @FI='01' + '/' + @m + '/' + @a
--//Ultimo dia del mes
set @FN=dateadd( month,1,@FI) -1
--//Ultimo dia del mes en formato dd/mm/yyyy
set @FcF=cast(day(@FN)as varchar) + '/' + cast(month(@FN)as varchar) + '/' + cast(year(@FN)as varchar)

Print 'Primer dia del Mes==>>' + @FI
Print 'Ultimo dia del Mes==>>' + @FcF

4 comentarios:

Unknown dijo...

Excelente ayuda. Estaba buscando una operacion similar para Sybase que me permitiera obtener el rango de fecha inicial y fecha final de cualquier mes de cualquier anio, gracias a este ejemplo encontre como hacerlo.
La forma en la que logre hacer lo que queria es la siguiente para Sybase:
--Codigo de ejemplo
declare @fini datetime, @ffin datetime, @dias int
set @fini = convert(datetime,'20080201')
set @ffin = dateadd(month,1,@fini)
set @dias = datediff(dd,@ffin,@fini)
set @ffin = dateadd(dd,(@dias*-1)-1,@fini)
select @fini, @ffin, @dias

Anónimo dijo...

primer dia del mes
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

ultimo dia del mes
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate() )+1, 0));

http://www.chocolim.com/?p=107

Jonathan dijo...

esos dos querys no sirven te dejo los don siguiente querys que te dicen el primer y ultimo dia del año o un mes segun como lo quieras ver

//año
//primer dia del año si desea un año en especifico solo cambia a la funcion getdate
select date(DATEADD(YEAR,0,dateadd(day,-(day ((DATEADD(MONTH,-MONTH(GETDATE())+1,GETDATE()))))+1,(DATEADD(MONTH,-MONTH(GETDATE())+1,GETDATE()))))) AS FECINI
//ultimo dia del año si desea un año en especifico solo cambia a la funcion getdate
select date(DATEADD(year,0,dateadd(month,1,dateadd(day,-(day ((dateadd(month,+12-month(getdate()),getdate())))),(dateadd(month,+12-month(getdate()),getdate()))))+1))
//mes
//primer dia del mes si desea un mes en especifico solo cambia a la funcion getdate
select date(dateadd(day,-day(getdate())+1,getdate()))
//ultimo dia del mes si desea un mes en especifico solo cambia a la funcion getdate
select date(dateadd(month,1,dateadd(day,-day(getdate()),getdate())))

Jonathan dijo...

esos dos querys no sirven te dejo los don siguiente querys que te dicen el primer y ultimo dia del año o un mes segun como lo quieras ver

//año
//primer dia del año si desea un año en especifico solo cambia a la funcion getdate
select date(DATEADD(YEAR,0,dateadd(day,-(day ((DATEADD(MONTH,-MONTH(GETDATE())+1,GETDATE()))))+1,(DATEADD(MONTH,-MONTH(GETDATE())+1,GETDATE()))))) AS FECINI
//ultimo dia del año si desea un año en especifico solo cambia a la funcion getdate
select date(DATEADD(year,0,dateadd(month,1,dateadd(day,-(day ((dateadd(month,+12-month(getdate()),getdate())))),(dateadd(month,+12-month(getdate()),getdate()))))+1))
//mes
//primer dia del mes si desea un mes en especifico solo cambia a la funcion getdate
select date(dateadd(day,-day(getdate())+1,getdate()))
//ultimo dia del mes si desea un mes en especifico solo cambia a la funcion getdate
select date(dateadd(month,1,dateadd(day,-day(getdate()),getdate())))