Construir expresion de rango de Fecha con Transact SQL server 2005

510 views
Skip to first unread message

TurbiSoft

unread,
Jan 28, 2010, 8:06:16 AM1/28/10
to Mundo Visual FoxPro
Saludo amigos, a ver si me dan una mano, quiero programar un Store
Procedure que reciba 2 parametros tipo fecha, para generar un reporte
hecho en Report Server de SQL Server 2005, desde el dia 1ro hasta el
ultimo del mes anteiror


En pensando en funcion de foxpro, seria mas o menos algo asi:
* Resto 30 dias a la fecha del sistema
dFechaActual=date()-30

* Busco el mes y el ano
STORE PADL(ALLTRIM(STR(MONTH(dFechaActual))),2,"0") TO cMes
STORE PADL(ALLTRIM(STR(year(dFechaActual))),4,"0") TO cAno

*Llamo una rutina que me da el ultimo dia del mes
STORE Padl(Allt(Str(Day(finmes(dFechaActual)),2)),2,"0") TO cUltimoDia

* Construyo el rango de fecha del mes anterior
m.fechai=CTOD("01/"+cMes+"/"+cAno)
m.fechaf = Ctod(cUltimoDia+"-"+cMes+"-"+cAno)

No tengo mucho conocimiento manipulando funciones de fecha con SQL
Server y estoy aprendiendo Report Service ahora.


Por favor cualquier sugerencia de alguien con experiencia en esto sera
bienvenida

Cristobal Galvan

unread,
Jan 28, 2010, 8:45:24 AM1/28/10
to mundovis...@googlegroups.com

Yo utilizo este formato y funciona a la perfeccion:

 

SQLEXEC(pnconexion, "EXEC ListarLiquidacion '16/01/2010 00:00:00', '16/01/2010 23:59:00'")

 

Espero te ayude.

TurbiSoft

unread,
Jan 28, 2010, 11:12:49 AM1/28/10
to Mundo Visual FoxPro
Gracias Cristobal por tu comentario, pero el reporte esta echo en
Reporting Services, y se autoejecuta los dia 1 y 10 de cada mes,

No hago nada con foxpro, el Problema es contruir la fecha con la
sintaxis de Reporting Services y enviar estos dos paramentros tipo
fecha al Store Procedure, estoy estudiando las funciones de manejo de
fechas.

Los dos parametros en reporting services, estan obteniendo el valor
por defecto de esta expresion:
=IIf(day(datevalue(now))=1 and month(datevalue(now))<>1,DateSerial(year
(datevalue(now)),month(dateadd("m",-1,now)),day(datevalue(now))),
IIf(day(datevalue(now))=1 and month(datevalue(now))=1,DateSerial(year
(dateadd("y",-1,now)),month(dateadd("m",-1,now)),day(datevalue(now))),
IIf(day(datevalue(now))=10 and month(datevalue(now))<>1,DateSerial(year
(datevalue(now)),month(dateadd("m",-1,now)),1),
IIf(day(datevalue(now))=10 and month(datevalue(now))=1,
DateSerial(year(dateadd("m",-12,now)),
month(dateadd("m",-1,now)),
1),datevalue(now)))))

Yo no la hice, no funciona cuando cambia el año, y quiero optimizarla,
creo que con menos codigo se puede obtener mejor resultado.

Richard Silva

unread,
Jan 29, 2010, 6:49:10 AM1/29/10
to Mundo Visual FoxPro
Para el caso que planteas, suelo utilizar la función Convert de SQL
Server para tratar las fechas como cadenas de caracteres. Por ejemplo,
prueba el siguiente código en una consulta del MS SQL Server
Management Studio:


-- Código T-SQL --

declare @cFechaActual char(8), @cFechaDesde char(8), @dFechaActual
date

set @dFechaActual = GETDATE()

set @cFechaActual = convert( char( 8 ), @dFechaActual, 112 )
set @cFechaDesde = convert( char( 8 ), dateadd( month, -1,
@dFechaActual ), 112 )

select @cFechaActual, @cFechaDesde

-- Fin del Código T-SQL --


Luego, puedes tratar las cadenas de caracteres resultantes para
obterner las fechas que requieres como parámetros en Reporting
Services.


--
Saludos, espero sea de ayuda.

TurbiSoft

unread,
Jan 29, 2010, 4:18:07 PM1/29/10
to Mundo Visual FoxPro
Gracias hermano, voy a probar y te informo.

TurbiSoft

unread,
Jan 29, 2010, 4:56:30 PM1/29/10
to Mundo Visual FoxPro
Abusando de tu tiempo, como podria obtener el ultimo dia de un mes
determinado, en Transact SQL?

Richard Silva

unread,
Jan 30, 2010, 3:03:20 PM1/30/10
to Mundo Visual FoxPro
En el código a continuación, se calcula del último día del próximo
mes:

-- Código T-SQL --

declare @dFechaActual date, @d1roMesProx date, @ldAux date

set @dFechaActual = GETDATE()

set @ldAux = DATEADD( month, 1, @dFechaActual )

set @d1roMesProx = DATEADD( day, -DATEPART( day, @ldAux ), @ldAux )

select @d1roMesProx

-- Fin del Código T-SQL --

--

Richard Silva

unread,
Jan 30, 2010, 3:06:57 PM1/30/10
to Mundo Visual FoxPro
Fe de erratas:

donde dice: "se calcula del último día del próximo mes", debe decir:
"se calcula del último día del mes actual"

--
Saludos, espero sea de ayuda

Reply all
Reply to author
Forward
0 new messages