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:

  1. 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

    ResponderBorrar
  2. 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

    ResponderBorrar
  3. 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())))

    ResponderBorrar
  4. 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())))

    ResponderBorrar

Gracias por sus comentarios.




Carlos Juan