Obtener fechas en SQL Server

El primer dia del mes:

SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

El Ultimo dia del mes:

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


El Lunes de la semana actual:

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)


Primer dia del año:

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

Ultimo dia del mes anterior:

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()  ), 0));

Ultimo dia del año anterior:

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate() ), 0))

Primer lunes del mes:

SELECT DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(DAY,getdate()),getdate())), 0);

65 comentarios en “Obtener fechas en SQL Server

  1. Johan

    gracias por publicar dichas funciones, en verdad me ayudaron para una aplicacion.

    Pero quisiera saber que funcion podria usar para obtener la penultima fecha, de un rango de un conjunto de facturas de un registro en especifico.

    si me pueden ayudar les agradeceria.

  2. Leon Cervantes

    –Primer domingo del mes
    SELECT DATEADD(wk, DATEDIFF(wk,6,DATEADD(dd,6-DATEPART(DAY,GETDATE()),GETDATE())), 6);

    –Ultimo domingo del mes
    SELECT DATEADD(wk, DATEDIFF(wk,6,DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,GETDATE()) 1, 0))), 6);

  3. chocolim Autor

    Modificando el Primer lunes del mes vas a poder encontrar el primer martes de hace 3 meses, el resto sumas semanas y vas a obtener la fechas que necesitas

  4. LAURA

    HOLA ME GUSTARIA SABER COMO SACAR EL AÑO ANTERIOR DE UNA FECHA QUE PASO COMO PARAMENTRO, EJEMPLO
    FECHA 20090419
    FECHA_ANT 20080419

  5. Ursus

    Laura:
    Tambien puedes hacer esto:

    select dateadd(year,-1,getDate())

    al getDate() lo puedes cambiar por la fecha que quieras

  6. migule martinez

    Hola a todos, creen que me pueden hechar la mano para sacar el primer dia del mes anterio. esto para efectos de reportes en sql. server.

    gracias.

  7. chocolim Autor

    Porque no haces lo siguiente:
    Con SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
    Encontras el primer dia del mes actual, y le restas un mes.

  8. Victor Olaechea

    Hola, or favor quisiera me orientes en lo siguiente:
    tengo un campo con formato timestampUTC (osea con la hora adelantada 5 horas), quiero pasarlo a la hora local en una consulta que estoy haciendo a traves del sql query del excel 2007…te agradeceré tu respuestas

  9. Theo

    Hola, actualmente estoy diseñando un reporte que saca las ventas actuales filtradas por vendedor y Fechas.

    Pero ahora el Gte. de ventas necesita que le coloque las ventas actuales vs las ventas del ano anterior filtradas por vendedor y fechas.

    como puedo hacer esta consulta?

    de antemano, muchas gracias por tu ayuda.

  10. Theo

    hola, necesito de su ayuda. estoy trabajando en un reporte que genera una consulta de las ventas actuales filtradas por periodo y fechas.

    ahora el Gte. de ventas necesita comparar las ventas actuales vs las ventas del ano anterior…

    como podria amar esta consulta si la comparacion se realizar articulo por articulo.
    Ejemplo:

    Vendedor Articulo VentaActual VentaAnoAnterior Variacion
    P03
    1021-0001 50 45 5
    1022-0002 45 60 -15

    Espero haber sido explicito. y muchas gracias por la ayuda.

  11. chocolim Autor

    No vas a poder hacer eso de una. Hace un store procedure y obtene las 2 cosas y hace un join
    O si podes arma un cubo con tus datos y quita asi

  12. Angelica

    Hola, aprovechando esta pag y de la informacion que dan arriba que por cierto muchas pero muchas gracias, me podrian ayudar…

    Necesito saber la fecha en que termina la semana actual …

    Espero su contestacion …Gracias

  13. chocolim Autor

    Con DATEPART(DW,@FECHA ) obtenes el numero de dia de la semana que estas, y con ese valor ve cuantos dias faltan para terminar la semana. Y le sumas esos dias a la fecha actual.

  14. jonathan

    –1. obtener atravez de una funcion los datos del empleado del mes es decir el empleado que mas a vendido
    –la funcion recive el mes y año y retorna el nombrecompleto del empleado
    por favor colaboreme plis parce

  15. Patty

    Consulta como puedo obtener el rango de fechas de una semana por ejemplo tengo la semana 39 del año 2010 y el rango de fechas es 20/09-26/09. Como dato adicional la semana comienza los lunes y el año el primer dia del año.

    Gracias.

  16. ulises

    hola en mi reporte para sql me requieren que haga una consulta de cuanta caña se obtiene de hoy 14 de febrero 6am -5:59am del dia 15 de febrero eso es todos los dias ya que la base de datos va actualizandose dia a dia con registro, el programa tendria que estarse ejecutando y diario mostrar el dia que consecuentemente seguira.. si le seguiria 15 d feb 6:00am-5:59am del 16 y asi… cada vez q se ejcute el programa esto es de .net me podrian ayudar con la consulta he visto q algo de datetime pero no entiendo muy bien por favor 🙁

  17. Giovanni

    Hola!
    Por casualidad tu sabras como en SQL puedo obtener el primer dia de la semana de una semana en particular dado el numero de la semana y el año?

    Por ejemplo:

    PrimerDiaDelaSemana(Semana,Año)
    MiFecha = PrimerDiaDelaSemana(51,2005)
    MiFecha = 12/12/2005

    Muchas gracias

  18. Meke

    Hola, me sirvió mucho tu publicación.
    Ahora me gustaría saber también cómo sacar el primer dia de la semana a partir de la semana y año.
    Muchas gracias de antemano.
    Un saludo

  19. juan

    Gracias, sin embargo, alguien sabe como restarle dias a una fecha?, por ejemplo, como qitarle 5 dias a una determinada fecha…

  20. Giovanni

    Hola, quiero mostrar el último día del mes anterior del año anterior, qué fórmula puedo utilizar? Gracias.

    Por ejemplo, si hoy es 4/May/2011, quiero obtener el 30/Abr/2010.

  21. Ely

    HOLA, quiero saber como hago para obtner las fechas de una semana dada, es decir ingreso la semana x del año y obtengo las fechas de inicio y fin de esa semana es posible, busque por todas lados y no encuentro solución.

    Gracias Ely

  22. Joel

    mi humilde aporte…. con esto obtengo el primer día, el ultimo día y el el ultimo día habil del mes anterior, tipico para reportes contables. Espero les sirva. Saludos.

    declare @primer_dia datetime
    declare @ultimo_dia DATETIME
    DECLARE @ultimo_dia_habil datetime

    declare @d varchar(2)
    DECLARE @m varchar(2)
    DECLARE @a varchar(4)
    DECLARE @FE varchar(50)
    DECLARE @FI varchar(50)
    DECLARE @FN varchar(50)
    DECLARE @FcF varchar(50)
    DECLARE @FcUdH VARCHAR(50)

    –//recupera el dia ctual
    set @d=day(dateadd(month, -1, GETDATE()))
    if len(@d) = 1 set @d=’0′ + @d

    –//recupera el mes actual
    set @m=month(dateadd(month, -1, GETDATE()))
    if len(@m)=1 set @m=’0′ + @m

    –//recupera el año actual
    set @a=year(dateadd(month, -1, GETDATE()))

    –//fecha dada por el sistema
    set @FE=@a + @m + @d

    –//Primer dia del Mes
    set @FI=@a + @m + ’01’
    –//Ultimo dia del mes
    set @FN=dateadd( month,1,@FI) -1
    –//Ultimo dia del mes en formato yyyymmdd

    –//recupera el dia ctual
    set @d=cast(day(@FN)as varchar)
    if len(@d) = 1 set @d=’0′ + @d

    –//recupera el mes actual
    set @m=cast(month(@FN)as varchar)
    if len(@m)=1 set @m=’0′ + @m

    set @FcF=cast(year(@FN)as varchar) + @m + @d

    set @primer_dia = @FI + ‘ 00:00:00.000’
    set @ultimo_dia = @FcF + ‘ 23:59:59.000’

    — Forzamos el primer día de la semana a Lunes, para calcular el último día habil del mes.
    SET DATEFIRST 1
    SET @ultimo_dia_habil=@ultimo_dia
    WHILE (DATEPART(dw,@ultimo_dia_habil)) > 5
    BEGIN
    SET @ultimo_dia_habil = @ultimo_dia_habil – 1
    END

    SELECT @primer_dia, @ultimo_dia, @ultimo_dia_habil

  23. Daniel

    Ola..me gustaria que me ayudaran me piden que liste determinados productos que fueron vendidos algun jueves….me podrian ayudar para ver que funcion puedo aplicar. en mi sentencia en sql server…gracias por su ayuda!

  24. Neil Lopez

    haber si me pueden ayudar con esto.
    tengo una base de datos de ventas, en la cual tengo un reporte al cual ingreso una fecha (YYYY-MM-DD) y este me da las ventas de ese mes en un acolumna.
    Ahora quisiera agregarles dos columnas, una que sea del ismo mes pero del año anterior, y otra columna que me acumule todos los periodos de ese año, Es decir si mi fecha ingresada es julio que sume desde enero a julio y si infreso como fecha marzo que solo sume las ventas de enero a marzo de ese año.

    Gracias
    Neil Lopez

  25. Ragempunk

    Holaaa… Alguien podria decir como sacar el dia de ayer? es decir la fecha anterior al dia actual… De antemano gracias.. espero puedan ayudarme

  26. Ragempunk

    Chicos ya lo resolvi… Igual aca les dejo x si alguien lo llega a necesitar…

    select convert (date, dateadd(day, -1, getdate( ) ) )

    asi retorna la fecha de ayer…

  27. Charly

    Buen dia, espero me puedan ayudar, solo necesito obtener el dia del año a partir de una fecha por ejemplo hoy es 23 de diciembre del 2011 deberia regresar 356, creo que es algo sencillo pero no tengo el conocimiento de como hacer con SQL

    Saludos y gracias de antemano!

  28. Charly

    Olvidenlo ya lo pude hacer con el dateDiff jejejeje
    se los paso por si a alguien le sirve

    select DATEDIFF(DD, ‘2011-01-01’, getdate()) as diaDelAño

    este es para el 2011 pero lo pueden hacer para cualquier año

    Saludos!

  29. Charly

    ya mas completo:

    declare @fecha datetime
    set @fecha = getdate() –Esta puede ser cualquier fecha

    select DATEDIFF(DD, CAST(YEAR(@fecha) As VARCHAR(4))+’-01-01′, @fecha) as diaDelAño

  30. Sergio

    Hola Buenas tardes,me podrian ayudar necesito obtener el dia 15 de cada mes..agradesco de antemano su atencion saludos

  31. Leoneth

    Hola quiciera saber como hago en una sentencia SQL, para que me mande el mes actual..
    Lo que en realidad quiero es lo siguiente, tengo que sacar un reporte donde me vote la cantidad vendida en los 3 meses anteriores para ser comparaciones venta, esta consulta me salio bien hasta el mes pasado ENERO, pero a partir de este mes FEBRERO, me vota cero, mi consulta es la siguiente:

    SELECT CASE WHEN MONTH(Ventas.Fecha)=@mesini THEN Salidas_Detalle.Cantidad ELSE ‘0’ END AS Mes1,
    CASE WHEN MONTH(Ventas.Fecha)=@mesmed THEN Salidas_Detalle.Cantidad ELSE ‘0’ END AS Mes2,
    CASE WHEN MONTH(Ventas.Fecha)=@mesfin THEN Salidas_Detalle.Cantidad ELSE ‘0’ END AS Mes3
    FROM dbo.Articulos AS Articulos INNER JOIN
    dbo.Salidas_Detalle AS Salidas_Detalle ON Articulos.Id_Articulo = Salidas_Detalle.Id_Articulo INNER JOIN
    dbo.Laboratorios AS Laboratorios ON Articulos.Id_Laboratorio = Laboratorios.Id_Laboratorio INNER JOIN
    dbo.Ventas AS Ventas ON Salidas_Detalle.Id_Salida = Ventas.Id_Salida LEFT OUTER JOIN
    dbo.Clientes ON Ventas.Id_Cliente = dbo.Clientes.Id_Cliente
    WHERE (MONTH(Ventas.Fecha)>=@mesini AND MONTH(Ventas.Fecha)< =@mesfin AND YEAR(Ventas.Fecha)=YEAR(GETDATE())) AND (Ventas.Anulada = 0) AND (Ventas.Id_Documento = '01' OR Ventas.Id_Documento = '03') AND (Articulos.Id_Articulo=@idart OR @idart='') AND (Articulos.Id_Laboratorio=@idlab OR @idlab='')AND (dbo.Clientes.tipcli = N'S' OR dbo.Clientes.tipcli = N'I') Como se abran dado cuenta estoy dando una sentencia por año "getdate" , lo que solo me especifica el año en q se esta trabajando, pero al momento de empesar el segundo mes de un año nuevo, esta cadena se rompe, por esso necesita trabajar por mes actual. o si tienen otra solucion mas conveniente se los agradeceria mucho, mi coreo es leoper2007@hotmail.com gracias …

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.