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 01-03-2012
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Encontrar aniversarios

Buenos días a todos.

Mediante una consulta SQL con tablas Paradox necesito encontrar todas las filas de una tabla en las que su fecha de cumpleaños esté comprendida entre dos dadas que no tienen que ser necesariamente del mismo mes, por ejemplo del 28 de febrero al 2 de marzo. Cuando es una sola fecha no tengo problemas:
Código SQL [-]
SELECT * FROM 'Personas.db' 
WHERE EXTRACT(MONTH FROM F_nacimiento) = Mes AND EXTRACT(DAY FROM F_nacimiento) = Dia

Pero ¿cómo podría hacer la consulta cuando son fechas como en el caso que pongo?

Última edición por Casimiro Notevi fecha: 01-03-2012 a las 12:01:53.
Responder Con Cita
  #2  
Antiguo 01-03-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.743
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
LA forma más sencilla es:
Código SQL [-]
SELECT * FROM 'Personas.db' 
WHERE 
F_nacimiento >= ?DesdeFecha and 
F_nacimiento <= ?HastaFecha
Responder Con Cita
  #3  
Antiguo 01-03-2012
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje

Código SQL [-]

SELECT * FROM 'Personas.db'
WHERE
F_nacimiento >= ?DesdeFecha and
F_nacimiento <= ?HastaFecha
No me vale, y no porque la idea sea mala. Yo tengo dos fechas, por ejemplo las que citaba antes; pero con la estructura que indicas sólo encontraría las del AÑO que se indicara en la fecha y yo necesito sacar las fichas de los cumplen años entre dos fechas de este año independientemente del año de nacimiento.

Última edición por Angel.Matilla fecha: 01-03-2012 a las 17:32:25. Razón: Al crearlo borré trozos por error
Responder Con Cita
  #4  
Antiguo 01-03-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
A ver asi:

Código SQL [-]
select * From  'Personas.db'
where extract(month from F_nacimiento) >= :mesini and extract(month from F_nacimiento) <= :mesfin
and extract(Day from F_nacimiento) >= :diaini and extract(Day from F_nacimiento) <= :diafin

Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 01-03-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una aproximación:

Código SQL [-]
select * from 'personas.db'
where
  31*extract(month from F_nacimiento) + extract(day from F_nacimiento) between 31*:mes_i + :dia_i and 31*:mes_f+ :dia_f

Multiplicar el mes por 31 es necesario para los casos en que el día inicial es mayor que el final aunque el mes inicial se menor. Lo malo es que no sirve para intervalos de fechas que crucen el cambio de año.

// Saludos
Responder Con Cita
  #6  
Antiguo 01-03-2012
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Algo parecido hago yo:

Código Delphi [-]
procedure TfrAniversarios.FormActivate(Sender: TObject);
begin
DecodeDate(Date,aa,mm,dd);
DmClientes.IBDtsCli.Close;
DmClientes.IBDtsCli.SelectSQL.Clear;
DmClientes.IBDtsCli.SelectSQL.Add('Select * From Alumnos ');
DmClientes.IBDtsCli.SelectSQL.Add('Where Baja=''N''');
DmClientes.IBDtsCli.SelectSQL.Add('And Extract(Month from Fnacimiento)= :M');
DmClientes.IBDtsCli.SelectSQL.Add('And Extract(Day from Fnacimiento)  =  ');
DmClientes.IBDtsCli.ParamByName('M').AsString:=FormatFloat('00',mm);
DmClientes.IBDtsCli.ParamByName('D').AsString:=FormatFloat('00',dd);

DmClientes.IBDtsCli.Open;

end;
Un Saludo
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 01-03-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
A como lo entiendo, la consulta de Caral debería dar los resultados correctos.
A la propuesta de roman no la he probado pero resulta interesante su forma.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
Encontrar importe Waldo Varios 2 14-01-2010 19:39:08
Donde encontrar b0rn OOP 3 03-04-2007 01:05:22
Cómo encontrar Roilo Varios 1 07-12-2005 15:48:12
Encontrar la paz interior santana Humor 3 14-06-2004 18:47:35
encontrar el siguiente en ado jzginez Conexión con bases de datos 1 21-05-2004 11:42:08


La franja horaria es GMT +2. Ahora son las 12:01:34.


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