¿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

#6 ulises
05/02/2004 - 21:16 | Informe spam
Muy bueno Javier, siguiendo tu consejo he creado una
funcion que forma una tabla con los sabados y domingos
entre dos fechas :

CREATE FUNCTION dbo.fn_obtieneFinSemana ( @fechaini
datetime, @fechafin datetime )
RETURNS @retFinSemana TABLE ( fecha datetime )
AS
BEGIN
DECLARE @fechaaux datetime
SET @fechaaux = @fechaini
WHILE ( @fechaaux < @fechafin )
BEGIN
IF DATEPART(dw,@fechaaux) = 7 OR DATEPART
(dw,@fechaaux) = 1
INSERT INTO @retFinSemana VALUES (
@fechaaux )
SET @fechaaux = @fechaaux + 1
END
RETURN
END

y luego solo restar en uan sentencia SELECT :

SELECT DATEDIFF(day,@fi,@ff) - ( SELECT count(*) FROM
dbo.fn_obtieneFinSemana(@fi,@ff))

Saludos,
Ulises


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 <emilio.loeda.NOSPAM-


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
#7 Emilio Garcia Loeda
06/02/2004 - 10:19 | Informe spam
Se agradece lo convertire un SP (tengo SQL 7)

"Javier Loria" wrote in
news::

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




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida