Ver Mensaje Individual
  #8 (permalink)  
Antiguo 04/06/2007, 13:35
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años, 1 mes
Puntos: 38
Re: operaciones con fechas días hábiles

Elegiste una estructura que favorece a la vista pero no al manejo de la informacion, en este caso, el cálculo de los dias hábiles.

Pero bueno, de cualquier forma te dejo una funcion que espero te sea de utilidad...

Saludos

Código:
-- =============================================
-- Generate Test Info
-- =============================================
Create table tmpRangosFechas (id int identity(1,1), descripcion varchar(20), FechaI datetime, FechaF datetime)

Insert into tmpRangosFechas(descripcion, FechaI, FechaF) Values ('Carnavales','20060227','20060228')
Insert into tmpRangosFechas(descripcion, FechaI, FechaF) Values ('Carnavales2','20060410','20060419')


-- =============================================
-- Create scalar function (FN)
-- =============================================
IF EXISTS (SELECT * FROM   sysobjects WHERE  name = N'fnQtyDays')
	DROP FUNCTION fnQtyDays
GO

CREATE FUNCTION dbo.fnQtyDays(
            @pFechaI datetime
           ,@pFechaF datetime)
RETURNS int
AS
BEGIN
   Declare  @Cuenta    int
           ,@dtFechaI  datetime
           ,@dtFechaF  datetime

   Declare @tblRangos Table (ValFecha datetime)



   Set @dtFechaI = convert(datetime, convert(varchar, @pFechaI, 112))
   Set @dtFechaF = convert(datetime, convert(varchar, @pFechaF, 112))


   While @dtFechaI <= @dtFechaF 
   Begin
       Insert into @tblRangos (ValFecha) Values (@dtFechaI)
       Set @dtFechaI = dateadd(d, 1, @dtFechaI)
   End
   
   
   Select @Cuenta = count(*) - 1
   From  @tblRangos  r 
   Left outer join
         tmpRangosFechas f (nolock) 
   On    r.ValFecha between f.FechaI and f.FechaF
   Where f.FechaI is null

   return isnull(@Cuenta,0) 

END
GO

-- =============================================
-- Example to execute function
-- =============================================
SELECT dbo.fnQtyDays('20060226', '20060301') DiasHabiles

-- DiasHabiles 
-- ----------- 
-- 1
GO


SELECT dbo.fnQtyDays('20070226', '20070301') DiasHabiles

-- DiasHabiles 
-- ----------- 
-- 3
GO
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.