fechas-sql-getdate

Aqui dejo un pequeño ejemplo para calcular periodos de fechas.

La idea es calcular los siguientes periodos:

– Lunes y Viernes de la semana pasada
– Inicio de Año
– Inicio del Mes


DECLARE @FechaHoy DATETIME
SET @FechaHoy = GETDATE()

select convert(char(8), @FechaHoy,112) hoy ,convert(char(8), dateadd("DAY",-5,dateadd("DAY",-1* DATEPART("WEEKDAY",
		@FechaHoy), @FechaHoy)) ,112) lunessemanapasada ,
		convert(char(8),
		dateadd("DAY",-1, dateadd("DAY",-1* DATEPART("WEEKDAY", @FechaHoy),
		@FechaHoy)) ,112)  viernessemanapasada

select convert(char(8), @FechaHoy,112) hoy ,
	convert(char(4),datepart("YEAR",@FechaHoy))+'0101' inicioaño,
	convert(char(8), dateadd("DAY",-1* DATEPART("WEEKDAY", @FechaHoy),
	@FechaHoy),112)	sabadopasado

select  convert(char(8), @FechaHoy,112) hoy ,
	substring(convert(char(8),@FechaHoy,112),1,6)+'01' iniciomes
	, convert(char(8), dateadd("DAY",-1* DATEPART("WEEKDAY", @FechaHoy),
	@FechaHoy),112)	sabadopasado

select  convert(char(8), @FechaHoy,112) hoy , convert(char(8),
	dateadd("DAY",-5,dateadd("DAY",-1* DATEPART("WEEKDAY", @FechaHoy),
	@FechaHoy)) ,112) lunespasado
	, convert(char(8), dateadd("DAY",-1* DATEPART("WEEKDAY", @FechaHoy),
	@FechaHoy),112) sabadopasado

Los resultados serian los siguientes:

hoy      lunessemanapasada viernessemanapasada
-------- ----------------- -------------------
20141010 20140929          20141003

hoy      inicioaño sabadopasado
-------- --------- ------------
20141010 20140101  20141004

hoy      iniciomes sabadopasado
-------- --------- ------------
20141010 20141001  20141004

hoy      lunespasado sabadopasado
-------- ----------- ------------
20141010 20140929    20141004

Los codigos se ejecutaron en un servidor SQL SERVER.

Espero que les sirva.

TYDW.-