Consulta

19/12/2008 - 11:00 por David | Informe spam
Muy buenas,

Microsoft SQL Server 2000

Escenario:
Tabla: [id],[desde],[hasta]

Campos [desde] y [hasta] almacenan fechas

¿Cómo montar una consulta que al pasarle un rango de fechas @inicio y @fin
devuelva los días que pertenencen al rango definido [desde] / [hasta]?

me explico:
en la tabla almaceno los siguientes rangos:

[desde] [hasta]
07/01/09 07/01/09
10/01/09 20/01/09


La consulta debería responder a la pregunta ¿Cuántos días "comparte" el
periodo por ejemplo del 06/01/09 al 12/01/09?

El resultado esperado:
1
3

el periodo introducido 06/01/09 al 12/01/09 para el primer registro comparte
1 día (el día 07/01/09)
el periodo introducido 06/01/09 al 12/01/09 para el segundo registro
comparten 3 días (el 10, 11 y el 12)

De antemano, muchísimas gracias.

Nota: ni idea por donde meterle mano.

Preguntas similare

Leer las respuestas

#6 Jose TH
20/12/2008 - 17:48 | Informe spam
La función podría ser así:

CREATE FUNCTION DiasCompartidos (@pf1 datetime, @pf2 datetime, @f1 datetime,
@f2 datetime)
RETURNS int
AS
BEGIN
set @pf1=convert(varchar(8),@pf1, 112)
set @pf2=convert(varchar(8),@pf2, 112)
set @f1 =convert(varchar(8),@f1, 112)
set @f2 =convert(varchar(8),@f2, 112)
declare @DiasRango int

set @DiasRango=DateDiff
(day,
(case when @f1>@pf1 then @f1 else @pf1 end), --Maxima fecha entre @f1 y @pf1
(case when @f2<@pf2 then @f2 else @pf2 end) --Minima fecha entre @f2 y
@pf2
) + 1 --sumo un dia

return (case when @DiasRango>0 then @DiasRango else 0 end) --cambio los
negativos por cero

END


Luego llamarla asi:

select id, desde,hasta, dbo.DiasCompartidos('20090106','20090112', desde,
hasta) as DiasCompartidos
from Tabla where...


Nota:Si quieres, te haces la funcion MaximaFecha si la has de reusar en otra
parte. MinimaFecha tambien quizas o llamar a la misma MaximaFecha con
parámetros invertidos.
Respuesta Responder a este mensaje
#7 David
20/12/2008 - 19:10 | Informe spam
Muchísimas gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida