Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2010
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Crear Calendario con SQL

Hola a todos:
A traves de una consulta SQL necesito crear un listado en memoria con los día que hay entre dos fechas. El entorno es el siguiente:
1. En una tabla existen dos campos FInicial y FFinal, por ejemplo 01/05/2011 y 25/08/2011, esta fecha pueden ser de cualquier rango pero siempre FInicio<=FFinal.
2. Quiero que con una sola instruccion SELECT de ese rango de fechas me presente una tabla que tenga un dia por cada registro ejem:
20110501
20110502
20110503
...
20110825

Desde allí ya puedo armar un calendario.

Lo primero que se me ocurrió fue hacerlo con un cursor, lo cual es sencillo, pero la aplicación lo requiere como un consulta. He realizado algunas pruebas, algo asi como
Código SQL [-]
SELECT FInicio, FInicio+RowCount FROM Tabla
WHERE FInicio+RowCount<=FFinal
pero solo obtengo 1 fila. Necesito algo que reemplace a RowCount para que vaya sumando una unidad.

Me temo que es dificil pero no pierdo la esperanza.

Gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 02-12-2010
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
Smile

Vendría bien que nos dijeras en que base de datos lo estás haciendo.

Si se trata de oracle, puedes sacar todos los días entre fechas con este código:

SELECT TRUNC(SYSDATE,'y') - 1 + ROWNUM dt FROM all_objects
WHERE (TRUNC(SYSDATE,'y') - 1 + ROWNUM) BETWEEN :Fechad AND :FechaH


Espero que, como base, te pueda ayudar un poco

Última edición por ElKurgan fecha: 02-12-2010 a las 08:02:31. Razón: Han salido caracteres raros en el código
Responder Con Cita
  #3  
Antiguo 02-12-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
en una query no sé, pero es bastante usual incluir una tabla de fechas con un registro por día.

Generalmente, se usan los campos
Fecha
Año
Mes ( nº y caracter )
Trimestre ( nº y caracter )
Semestre ( nº y caracter )
Dia semana ( nº y caracter )

Con un procedimiento que añada un año completo.

Luego, con esta tabla, además de poder hacer lo que quieres ( cruzando tu tabla con ésta ), puedes sacar estadísticas por todos los campos que están incluidos.

Espero que te sirva.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 02-12-2010
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Hola ElKurgan:
Yo uso MS SQL 2005, de todas formas probaré como podría adaptar el ejemplo que me envías, y si ya sabes como resolverlo con MSSQL, te agradecería me lo dijeras.

Un saludo
Responder Con Cita
  #5  
Antiguo 02-12-2010
gcaffe gcaffe is offline
Miembro
 
Registrado: oct 2004
Posts: 53
Poder: 20
gcaffe Va por buen camino
Hola fjcg02:

La solución de la tabla ya la tengo implantada, lo que realmente quiero es crear un calendario de 3 meses en tiempo de ejecución y que temporalmente este en memoria, dependiendo de la consulta que realice el usuario.

Gracias por tu respuesta
Responder Con Cita
  #6  
Antiguo 02-12-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Entonces es más fácil.

Sólo tienes que hacer una función que cargue un clientdataset con los días entre el intervalo.
Para esos menesteres es lo mejor porque puedes aprovecharte de toda la potencia de los mismos ( funciones Addrecord, deleterecord, locate, ...).
Tienes información de este tema específico en delphi al limite.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 13-12-2012
kikin911 kikin911 is offline
Registrado
NULL
 
Registrado: dic 2012
Posts: 1
Poder: 0
kikin911 Va por buen camino
Crear Calendario

Crear un tabla tbl_fecha con campos fecha y feriado

Y luego correr esta query :

declare @fecIni datetime
declare @fecFin datetime


SELECT @fecIni = '01/02/2013'
SELECT @fecFin = '31/12/2013'


WHILE @fecIni <= @fecFin
BEGIN

INSERT INTO tbl_fecha (fecha, feriado) VALUES (@fecIni ,'N')

---SELECT FECHA = @fecIni
SET @fecIni = dateadd(d, 1, @fecIni);

END;
Responder Con Cita
  #8  
Antiguo 13-12-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración


Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #9  
Antiguo 14-12-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola gcaffe

Lo que ha puesto el compañero kikin911 es correcto, lo que yo añado es la tabla en memoria.
Código SQL [-]
DECLARE
  @fIni   smalldatetime
  ,@fFin  smalldatetime
  ,@d     tinyint

DEClARE
  @MyCalendario  TABLE (FECHA smalldatetime)

SET @fIni = '01/05/2011'
SET @fFin = '25/05/2011'
SET @d    = 0

WHILE @fIni <= @fFin
BEGIN
  INSERT INTO @MyCalendario VALUES (@fIni)
  SET @fIni = DATEADD(d, 1, @fIni)
END

SELECT
    FECHA
  FROM @MyCalendario

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 14-12-2012 a las 08:44:14.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear un calendario alopete Varios 9 03-04-2017 10:48:12
crear un calendario sin usar el Date del sistema pablopessoa Varios 0 13-02-2009 19:09:44
Como crear calendario y reloj Mario1980 Varios 4 15-10-2004 16:20:45
Calendario srangel JAVA 1 04-09-2004 12:58:08
calendario botones67 Impresión 5 17-05-2003 16:01:35


La franja horaria es GMT +2. Ahora son las 00:58:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi