SQL - Mostrar rango de fechas

 
Vista:

Mostrar rango de fechas

Publicado por Carlos (1 intervención) el 25/02/2010 18:57:09
Hola a todos,
Tengo una tabla llamada fechas con dos atributos, fecha_inicio y fecha_fin.
Me gustaria generar una consultada donde me muetre todos las fechas que estan comprendidas entre esas dos.
Ejemplo:

TABLA:
-----------------------------------------
FECHA_INICIO----FECHA_FIN
10/02/2010-------13/02/2010
-------------------------------------------

Y quiero que me muestre estos valores:
FECHAS
------------
10/02/2010
11/02/2010
12/02/2010
13/02/2010

Entendeis a lo q me refiero?

Gracias

Carlos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Mostrar rango de fechas

Publicado por Leonardo Josue (1173 intervenciones) el 25/02/2010 21:06:55
Buenas Tardes Carlos... Yo quise hacer una consulta parecida hace tiempo y tengo que reconocer que no lo logré, por lo tanto tuve que hacer uso de un procedimiento almacenado. Lamentablemente el manejo de las fechas varía mucho entre un manejador de BD y otro, pero aquí te pongo un ejemplo para SQL Server y sería cuestión que lo adecues al manejador que estés utilizando:

/*Creamos un procedimiento almacenado que recibe las fechas de inicio y fin*/
CREATE PROCEDURE [dbo],[rango_fechas]
@FECHA_INICIO_STR VARCHAR(10),
@FECHA_FIN_STR VARCHAR(10)
AS
DECLARE @FECHAS TABLE (FECHA DATETIME)
DECLARE @FECHA_INICIO DATETIME
SET @FECHA_INICIO = CONVERT(DATETIME, @FECHA_INICIO_STR, 103)
DECLARE @FECHA_FIN DATETIME
SET @FECHA_FIN = CONVERT(DATETIME, @FECHA_FIN_STR, 103)
DECLARE @FECHA_TEMP DATETIME
SET @FECHA_TEMP = @FECHA_INICIO
WHILE @FECHA_TEMP <= @FECHA_FIN
BEGIN
INSERT INTO @FECHAS(FECHA) VALUES (@FECHA_TEMP)
SET @FECHA_TEMP = DATEADD(day, 1, @FECHA_TEMP)
END
SELECT CONVERT(VARCHAR, FECHA, 103) AS FECHA FROM @FECHAS
GO

/*Para ejecutar el Procedimiento almacenado lo hacemos así*/
EXEC [dbo].[rango_fechas] '10/02/2010', '15/03/2010'

Saludos y comentas si te sirvió de ayuda el código.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mostrar rango de fechas

Publicado por Leto (12 intervenciones) el 25/02/2010 21:31:35
Lo que pretendes no parece apropiado para una consulta. Las consultas tienen el cometido de reunir datos, no de inventarlos. Así que lo que se me ocurre es lo siguiente:

O lo haces por programa (PHP, JAVA , .NET , PL/SQL...), o bien creas una tabla (mejor que la llene un proceso automático) con todos los días del calendario, pongamos... 5 años vista?, no se, depende de lo que necesites, de modo que puedas construir una consulta como la siguiente:

select fecha
from calendario , tuTabla
where fecha between fecha_inicio and fecha_fin
order by fecha

para llenar la tabla si trabajas en oracle puedes hacerlo así en PL/SQL:

declare
primer_dia date := to_date('ddmmyyyy','01012010'); -- primer día del calendario
num_dias number : = 3000; -- dias que contendrá el calendario
begin

num_dias := num_Dias -1;

for dias in 0..num_dias loop
insert into calendario(fecha) values (primer_dia + dias);
end loop;

commit;
end;


saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Mostrar rango de fechas

Publicado por ChidUng (4 intervenciones) el 26/02/2010 05:45:30
Hola Puedes hacer esto:

Select Convert(varchar(10),campo_Fecha,108) AS fecha FROM TABLA
WHERE Campo_Fecha BETWEEN '20100101 00:00:01' AND '20100225 23:59:59'

Las fechas que he colocado son en el formato estandar ANSI, de tal forma tu fecha inicial y final debes formatearla a ese estandar para que no tengas problemas entre las distintas cersiones de SQL.

Solo no estoy seguro del "108", checalo solo ese parámetro es el que fallaría, busca sobre el CONVERT() ya que este te puede proporcionar o la fecha unicamente o la hora.

Espero te sirva, Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar