aGrAdEcEr Es CoMpArTiR... CoMpArTe Lo QuE tE gUsTó A TuS ReDeS SoCiALeS... Twitter, Google+ y Facebook.

Wednesday, May 21, 2008

CóMo DesgLoSar Un RanGo De FeChaS

Hace un poco más de un mes cuando empezé a hacer mis consultas en SQL para mis reportes, me encontré con que necesita desglosar un rango de fechas para mostrar el horario de los empleados. Bueno, lo primero que me dijeron es: eso se soluciona utilizando TABLAS TEMPORALES. Una tabla temporal se la usa para guarda datos que sólo sirven para el proceso que se está realizando. Sólo se la tiene disponible en ejecución.

Ok, resulta que como datos sólo tengo un rango de fechas: del '01/05/2008' al '31/05/2008' y lo que se pretende hacer es desglosarlo... o sea

01/05/2008
02/05/2008
03/05/2008
04/05/2008
...
31/05/2008

Ok, eso es lo que voy a mostrarle... y cómo usar esa tabla dependerá de sus requerimientos.

1) Creamos un Stored Procedure (Un stored procedure o procedimiento almacenado es un programa (o función) el cual está físicamente almacenado en una base de datos)


CREATE PROCEDURE spDias
@fechaini datetime,
@fechafin datetime
AS
BEGIN
create table #Fecha
(codigo int, fecha datetime)
declare @dif as int
declare @cont as int
declare @fechaact as datetime
set
@dif=datediff(day,@fechaini,@fechafin)
set
@cont=1
set @fechaact=@fechaini-1
WHILE (@cont<=@dif+1) BEGIN
set @fechaact=dateadd(day,1,@fechaact)
INSERT INTO #Fecha VALUES (@cont,@fechaact)
set @cont=@cont+1
END

select * from #Fecha
END


Ok, copian ese código en el editor de consultas del Microsoft SQL Server Management Studio o del que estén usando, en mi caso yo utilizo el que mencioné.

Crear una tabla temporal es casi similar a una tabla normal con la diferencia que se le antepone un numeroal (#) al nombre de la tabla.

Ok, una vez ejecutado ese código si está todo Ok, tienen que salirle: "Query executed successfully"

2) Luego llaman al stored procedure con la siguiente línea:


exec spDias '2008/05/01','2008/05/31'

Y obviamente, tiene que generar el desglose de ese rango de fechas, así:



Sencillo, no?

No comments:

Post a Comment