¿Cuantos dias hay entre dos fechas ...

05/02/2004 - 16:11 por Emilio Garcia Loeda | Informe spam
..., pero sin tener en cuante los fines de semana?

Deseo evitar el uso de cursores para saber la diferencia entre dos fechas
(no vale datediff()) pero teniendo en cuenta los fines de semana.

He sabido descontar entre dos fechas los festivos, utilizando una tabla
auxiliar (con los festivos), pero quiero evitar este metodo para los fines
de semana.

¿alguien de vosotros ya se ha enfrentado este problema?
¿como se resolvio?

SAludos

Emilio Gª Loeda

www.loeda.net

Preguntas similare

Leer las respuestas

#1 Maximiliano D. A.
05/02/2004 - 16:19 | Informe spam
Estimado, lo que vos queres hacer es sacar los dias habiles entre 2 fechas
verdad?

no veo otra opcion que implementes una Funcion definida por el usuario,
porque aca dependera sobre todo del calendario que debes tomar y muchos
otros factores mas.

No quedara que hacer un Algotirmo, la verdad que aca no lo tengo a mano pero
creo tener un ej de algo parecido, si lo encuentro lo envio.

Salu2

Maximiliano Damian Accotto


"Emilio Garcia Loeda" escribió en
el mensaje news:
..., pero sin tener en cuante los fines de semana?

Deseo evitar el uso de cursores para saber la diferencia entre dos fechas
(no vale datediff()) pero teniendo en cuenta los fines de semana.

He sabido descontar entre dos fechas los festivos, utilizando una tabla
auxiliar (con los festivos), pero quiero evitar este metodo para los fines
de semana.

¿alguien de vosotros ya se ha enfrentado este problema?
¿como se resolvio?

SAludos

Emilio Gª Loeda

www.loeda.net
Respuesta Responder a este mensaje
#2 PEDRO HURTADO
05/02/2004 - 16:32 | Informe spam
utiliza datepart para saber el primer dia y el ultimo
entre las dos fechas, despues deberas saber las semanas
totales desde la primera semana + 1 de la fecha de inicio
hasta la ultima semana -1,multiplica las semanas * 5 y les
sumas los dias devueltos por datepart para la primera y la
ultima semana.
Espero que te sirva.

, pero sin tener en cuante los fines de semana?

Deseo evitar el uso de cursores para saber la diferencia


entre dos fechas
(no vale datediff()) pero teniendo en cuenta los fines de


semana.

He sabido descontar entre dos fechas los festivos,


utilizando una tabla
auxiliar (con los festivos), pero quiero evitar este


metodo para los fines
de semana.

¿alguien de vosotros ya se ha enfrentado este problema?
¿como se resolvio?

SAludos

Emilio Gª Loeda

www.loeda.net
.

Respuesta Responder a este mensaje
#3 Emilio Garcia Loeda
05/02/2004 - 16:54 | Informe spam
Ante todos gracias todos, al final tendre que realizar un SP_xxx , una
primera aproximación podria ser

declare @dateDesde as datetime --Fecha Inicio
declare @dateHasta as datetime --Fecha Final
declare @datePuntero as datetime --Puntero tipo Fecha
declare @intDiasDescanso as integer --nº de Sabados y Domingo

set @datedesde=Getdate()-4 -- Una fecha inicio cualquiera
set @dateHasta=getdate()+7 -- Una Fecha Final Cualquiera
set @intDiasDescanso=0

set @datePuntero=@datedesde -- Inicio el Puntero

while @datePuntero<=dateHasta
begin
if datepart(dw,@datePuntero) in (7,6) -- si el puntero es un
set @intDiasDescanso=@intDiasDescanso+1 -- Sumo uno
set @datePuntero=@datePuntero+1 -- Incremento Puntero
end

print @intDiasDescanso




Emilio Garcia Loeda wrote in
news::

..., pero sin tener en cuante los fines de semana?

Deseo evitar el uso de cursores para saber la diferencia entre dos
fechas (no vale datediff()) pero teniendo en cuenta los fines de
semana.

He sabido descontar entre dos fechas los festivos, utilizando una
tabla auxiliar (con los festivos), pero quiero evitar este metodo para
los fines de semana.

¿alguien de vosotros ya se ha enfrentado este problema?
¿como se resolvio?

SAludos

Emilio Gª Loeda

www.loeda.net
Respuesta Responder a este mensaje
#4 Emilio Garcia Loeda
05/02/2004 - 17:24 | Informe spam
Bueno os paso mi SP para determinar la cantidad de festivos entre dos
fecha (sin contar los fines de semana)

Nos hace falta una tabla auxiliar

CREATE TABLE [dbo].[festivos] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[fecha] [smalldatetime] NOT NULL ,
[descripcion] [varchar] (50) NULL ,
[provincia] [varchar] (50) NULL ,
[localidad] [varchar] (50) NULL
) ON [PRIMARY]
GO


El SP es el siguiente

/************************************************************************
**************/ /* Stored Procedure: sp_sift_festivos
*/ /* Creation Date: 05/02/2004 */
/* Copyright: Telsi S.A. */
/* Written by: Emilio Garcia Loeda */
/* */
/* Purpose: Actualizar los componentes */
/* */
/* Input Parameters: @strProvincia, provincia donde se ejecuta el SP
*/ /* Input Parameters: @strLocalidad, localidad donde se
ejecuta el SP */ /* Input Parameters: @strDesde, Fecha
inicial */ /* Input Parameters: @strHasta,
fecha FInal */ /* */
/* Output Parameters: @intDias, nº de dias festivos (sin fines semana)
*/ /* */
/* Return Status: Produción
*/ /* */
/* Usage: exec sp_sift_festivos
'Ourense','Ribadavia','01/01/2003','15/02/2004' */ /*
*/ /* Local Variables:
*/ /* */
/* Called By: .
*/ /* */
/* Calls: */
/* */
/* Data Modifications: Ninguna */
/* */
/* Updates: */
/* Date Author Purpose */
/* 05/02/2004 EGL */
/* */
/************************************************************************
**************/

CREATE procedure sp_sift_festivos
@strProvincia varchar(30),
@strLocalidad varchar(30),
@strDesde datetime,
@strHasta datetime,
@intDias integer output
as

set @strProvincia=ltrim(rtrim(@strProvincia))
set @strLocalidad=ltrim(rtrim(@strLocalidad))
set @strDesde=convert(char,@strDesde,112)
set @strHasta=convert(char,@strHasta,112)
set @intDias=0

select @intDias=count(*) from festivos
where convert(char,fecha,112) BETWEEN @strDesde and @strHasta
and (provincia=@strProvincia and (localidad=@strLocalidad or
localidad is NULL)) and datepart(dw,fecha) not in (6,7)



Emilio Garcia Loeda wrote in
news::

..., pero sin tener en cuante los fines de semana?

Deseo evitar el uso de cursores para saber la diferencia entre dos
fechas (no vale datediff()) pero teniendo en cuenta los fines de
semana.

He sabido descontar entre dos fechas los festivos, utilizando una
tabla auxiliar (con los festivos), pero quiero evitar este metodo para
los fines de semana.

¿alguien de vosotros ya se ha enfrentado este problema?
¿como se resolvio?

SAludos

Emilio Gª Loeda

www.loeda.net
Respuesta Responder a este mensaje
#5 Javier Loria
05/02/2004 - 17:33 | Informe spam
Hola Emilio:
Espero te sirva esta funcion definida de usuario:
CREATE FUNCTION dbo.DiasLaborales
( @FechaInicio datetime,
@FechaFinal datetime )
RETURNS INT
AS
BEGIN
IF (DATEPART(dw,@FechaInicio)=7)
BEGIN
SET @FechaInicioÚTEADD(dd,-1,@FechaInicio)
END
IF (DATEPART(dw,@FechaFinal)=7)
BEGIN
SET @FechaFinalÚTEADD(dd,-1,@FechaFinal)
END
RETURN
DATEDIFF(dd,@FechaInicio,@FechaFinal)
-(DATEDIFF(ww,
DATEADD(dd,7-DATEPART(dw,@FechaInicio), @FechaInicio),
DATEADD(dd,7-DATEPART(dw,@FechaFinal ), @FechaFinal))
*2)
END
Es una "traduccion" a SQL de un viejo algoritmo de C++ que usaba hace
anos, podrias revisarla bien, haciendo pruebas con muchas fechas, para ver
si te brinda los resultados deseados, tambien podrias restar lor feriados.
Si pudes cambiar tus tablas considera la posiblidad de en lugar de
contar con una tabla de festivos considera la posibilidad de tener una tabla
con TODOS los dias, y con una columna DiaHabil igual a 1 cuando lo sea y 0
para Fines de Semana o Festivos.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Emilio Garcia Loeda escribio:
..., pero sin tener en cuante los fines de semana?

Deseo evitar el uso de cursores para saber la diferencia entre dos
fechas (no vale datediff()) pero teniendo en cuenta los fines de
semana.

He sabido descontar entre dos fechas los festivos, utilizando una
tabla auxiliar (con los festivos), pero quiero evitar este metodo
para los fines de semana.

¿alguien de vosotros ya se ha enfrentado este problema?
¿como se resolvio?

SAludos

Emilio Gª Loeda

www.loeda.net
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida