Fechas entre rango de Dias

21/05/2008 - 15:35 por Hernan Nieto | Informe spam
Hola,

Tengo una tabla q contiene una fecha_emision y una fecha_vencimiento,
deseo obtener por medio de una consulta todas las fechas existentes
dentro de ese periodo, ejemplo:
Emision!/05/2008 Vencimiento: 31/05/2008
Obtener 21/05/2008
22/05/2008
.
31/05/2008

Se podra?. La idea es usar ese resultado para poder contar los Sabados
y Domingos existentes dentro de ese rango. Desde ya muchas gracias.

Saludos
 

Leer las respuestas

#1 Carlos M. Calvelo
21/05/2008 - 16:50 | Informe spam
Hola Hernan,

On 21 mei, 15:35, Hernan Nieto wrote:
Hola,

Tengo una tabla q contiene una fecha_emision y una fecha_vencimiento,
deseo obtener por medio de una consulta todas las fechas existentes
dentro de ese periodo, ejemplo:
Emision!/05/2008 Vencimiento: 31/05/2008
Obtener> 21/05/2008
22/05/2008
.
31/05/2008

Se podra?. La idea es usar ese resultado para poder contar los Sabados
y Domingos existentes dentro de ese rango. Desde ya muchas gracias.




Aquí abajo te dejo una funcion Fechas() que devuelve una tabla con
fechas y una columna dia de la semana. 0=sábado ... 6=viernes.

Con esa función puedes hacer un select como:

select *
from dbo.Fechas('20080521','20080531')
where diasemana < 2

para ver todos los dias de fin de semana. O con un count(*)
puedes contalos... etc. Vamos que es una tabla.


Otra opción es una función que genera números en una tabla
y esta tabla la puedes utizar para muchos fines. En este
caso por ejemplo para hacer un join con fechas y así generar
un rango de fechas. Aquí abajo te dejo también esa funcion
Numbers() por si quieres hacer tus experimentos.
La puedes utizar por ejemplo así:

select TablaConFecha.Fecha + N.number
from
(select cast('20080521' as datetime) as fecha) TablaConFecha
cross join
dbo.Numbers(0,199,1) N

para generar una tabla con 200 fechas a partir de una dada.

Y todavía otra opción es crear una función que simplemente
calcule el total de días de fin de semana entre dos fechas,
claro. Pero estas dos funciones son más genéricas y las
puedes utilizar para mas cosas.

Saludos,
Carlos


create function Fechas(@mindate datetime, @maxdate datetime)
returns @fechas TABLE (fecha datetime, diasemana int)
as
begin
while @mindate <= @maxdate
begin
insert into @fechas (fecha,diasemana)
values (@mindate, (datepart(dw, @mindate)+@@datefirst)%7)
set @mindate = @mindate + 1
end
return
end
CREATE FUNCTION Numbers (@min INT, @max INT, @step INT)
RETURNS @numbers TABLE (number int)
AS
BEGIN
IF @step <= 0 OR @min > @max
RETURN
WHILE @min <= @max
BEGIN
INSERT @numbers VALUES (@min)
SET @min = @min + @step
END
RETURN
END

Preguntas similares