Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

operaciones con fechas días hábiles

Estas en el tema de operaciones con fechas días hábiles en el foro de SQL Server en Foros del Web. Buenas tardes. Estube buscando en el foro y no consegui nada igual. Les cuento lo que quiero hacer, tengo una consulta que a partir de ...
  #1 (permalink)  
Antiguo 04/06/2007, 10:10
Avatar de fenix4  
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 5 meses
Puntos: 1
operaciones con fechas días hábiles

Buenas tardes.

Estube buscando en el foro y no consegui nada igual.

Les cuento lo que quiero hacer, tengo una consulta que a partir de una "fecha A" y la "Fecha Actual" me cuanta cuantos días hay, esa parte no tiene problemas, la cuestión es que necesito que a ese total le reste los días feriados.

Hay alguna forma de hacer eso???
__________________
S.L.P.S.
  #2 (permalink)  
Antiguo 04/06/2007, 10:32
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: operaciones con fechas días hábiles

Tienes una catalogo donde se puedan identificar los dias inhabiles??
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 04/06/2007, 10:35
Avatar de fenix4  
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: operaciones con fechas días hábiles

No Andres95, no lo tengo

Como hago uno, por que me imagino que en algun lugar debo tener los días no habiles.
__________________
S.L.P.S.
  #4 (permalink)  
Antiguo 04/06/2007, 10:43
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: operaciones con fechas días hábiles

Asi es...
en alguna tabla deberás tenerlo para poder hacer la discriminación de esos dias.... o bien tener un conjunto de reglas que de digan cuando un dia es habil o no lo es...

Puedes hacer una tablita con las fechas y un campo que indique si es habil o no... con una interfaz de calendario... ya depende de tu aplicación...

Un saludo...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 04/06/2007, 12:14
Avatar de fenix4  
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: operaciones con fechas días hábiles

Voy a hacer la tabla con los días de vacaciones.. y luego que hago con ellos?? otra cosa como se si es sabado o domingo??? o tambien tengo que agregar esos días a la tabla. ???
__________________
S.L.P.S.
  #6 (permalink)  
Antiguo 04/06/2007, 12:55
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: operaciones con fechas días hábiles

puedes agregarlos de una vez, para que el query sea mas sencillo, (aunque se puede saber el numero de dia de la semana en SQL server) y que todo quede transparente.


Cuando tengas la estructura de tu tabla, posteala y armamos la consulta...
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 04/06/2007, 13:02
Avatar de fenix4  
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 5 meses
Puntos: 1
Busqueda Re: operaciones con fechas días hábiles

id descripcion fecha_d fecha_h
1 Carnavales 27/02/2006 28/02/2006
2 Semana Santa 10/04/2006 14/04/2006
3 Firma Acta independecia 19/04/2006 19/04/2006
4 Día del trabajor 01/05/2006 01/05/2006
5 Independecia 05/07/2006 05/07/2006
6 Vacaciones Escolares 28/07/2006 11/09/2006
7 Día La resistencia Indigena 12/10/2006 12/10/2006
8 Vacaciones decembrinas 20/12/2006 08/01/2007

Aqui dejo mi tabla. Como veran la idea es con un rango de fecha, cuando se repite el numero es por que solo contempla ese día.

Aquí esta mi consulta como esta hoy en día..

Código:
SELECT     DATEDIFF([day], Fecha_rec_ccnpg, ISNULL (fecha_recau_comp, GETDATE())) AS dia_rev
FROM         dbo.tabla
La idea es saber cuantos días habiles han pasado desde fecha_rec_ccnpg hasta fecha_recau_comp y si esta es nula, entonces hasta el día actual.
__________________
S.L.P.S.
  #8 (permalink)  
Antiguo 04/06/2007, 13:35
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
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.
  #9 (permalink)  
Antiguo 04/06/2007, 14:10
Avatar de fenix4  
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 5 meses
Puntos: 1
De acuerdo Re: operaciones con fechas días hábiles

Excelente!!!

Gracias!!! de mi parte y de los que tambien se veneficiaran de este codigo.

Otra cosa, se puede mejorar el codigo para que elimine tabien los sadados y domindos???
__________________
S.L.P.S.
  #10 (permalink)  
Antiguo 04/06/2007, 15:25
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: operaciones con fechas días hábiles

Código:
Drop table tmpRangosFechas
go
-- =============================================
-- 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')
Insert into tmpRangosFechas(descripcion, FechaI, FechaF) Values ('Carnavales2','20070601','20070605')


-- =============================================
-- 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)

   declare @dateFirst int
   set @dateFirst = 1
   

   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          And 
         DatePart(dw, r.ValFecha) <>  (7 - @@DateFirst + (7*(@@Datefirst/7)))   And -- Que no sea Sabado
         DatePart(dw, r.ValFecha) <>  (8 - @@DateFirst)                             -- Que no sea Domingo




   return isnull(@Cuenta,0) 

END
GO

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

-- DiasHabiles 
-- ----------- 
-- 2
GO


SELECT dbo.fnQtyDays('20070608', '20070612') DiasHabiles   

-- DiasHabiles 
-- ----------- 
-- 3
GO


SELECT dbo.fnQtyDays('20070531', '20070615') DiasHabiles   

-- DiasHabiles 
-- ----------- 
-- 8
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.
  #11 (permalink)  
Antiguo 20/06/2007, 07:36
Avatar de fenix4  
Fecha de Ingreso: noviembre-2001
Ubicación: Caracas
Mensajes: 226
Antigüedad: 22 años, 5 meses
Puntos: 1
Re: operaciones con fechas días hábiles

Creo que es mejor dejarla sin lo de los sabados y los domingos..

Por que al llamar a una consulta se tarda demasiado, si le colocamos eso y la busqueda es extensa se va atardar mucho, y en algunos navegadores no traera nada.

A menos que se pueda modificar el codigo para sea más rapido...

De todas maneras Gracias a Andres95 que me saco de esa situación problematica.
__________________
S.L.P.S.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:41.