 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Nuevo Invitado
|
Publicado: Lun 31 Mar, 2003 2:50 pm Asunto: Consulta por fecha en SQL? |
|
|
Hola, no sé si aqui me podreis ayudar, necesito averiguar con 15 dias de antelación las fechas de cumpleaños de una base de datos hecha en Access.
Me explico, el usuario necesita sacar un listado de los cliente que van a cumplir años desde el dia de hoy y 15 dias en adelante.
El problema es que el campo tiene que ser de tipo texto en la base de datos. Aun poniendolo como Fecha, la instrucción no funciona. Pero el campo tiene que ser texto.
Select *
From Tabla
Where Fecha_Nacimiento =Date()+15
¿Me podeis ayudar?
Os estaría muy agradecido
Gracias de antemano |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Lun 31 Mar, 2003 4:10 pm Asunto: jaquemate |
|
|
Si he entendido bien, el campo de la fecha ha de ser de tipo texto. No sé muy bien, porqué pero en fin. No sé si sabrás que si quieres ordenar una tabla o consulta por este campo y este está en formato texto, ha de ser con el siguiente formato: YYYYMMDD (es decir: año, mes y día) ya que si el formato fuese DDMMYYYY, te ordenaría primero por el día, luego por el mes y por último por el año ya que a la hora de ordenar por un campo de tipo texto se ordena conforme a la tabla ASCII.
Según esto, el código sería:
| Código: | AnsiString consulta = "select * from tabla where fecha_nacimiento = '" + FormatDateTime("yyyymmdd",Date() + 15) + "'"; |
Pero esto tampoco te serviría, ya que te buscaría los clientes que cumplen años dentro de quince días justos, pero no los que van a cumplir años mañana por ejemplo. Por esta razón, la consulta correcta sería:
| Código: | AnsiString consulta = "select * from tabla where fecha_nacimiento >= '" + FormatDateTime("yyyymmdd",Date()) + "' and fecha_nacimiento <= '" + FormatDateTime("yyyymmdd",Date() + 15) + "'"; |
Un saludo. |
|
| Volver arriba |
|
 |
Nuevo Invitado
|
Publicado: Lun 31 Mar, 2003 5:21 pm Asunto: |
|
|
Agradezco mucho tu contestación tan rápida. Ahora voy a probarlo.
En realidad el campo es de tipo texto porque no he conseguido controlar los errores que me daba la base de datos cuando introducían algo que no aceptase el campo fecha. Tengo un table, navigator y Datasource.
Por si alguien sabe como hacerlo, pero si cambio el formato ya no me valdría tu solucion verdad? |
|
| Volver arriba |
|
 |
amatilla Cdt


Registrado: 03 Abr 2003Mensajes: 15
|
Publicado: Vie 04 Abr, 2003 7:50 am Asunto: Fechas en SQL |
|
|
También puedes usar la función DecodeDate para incluir la fecha en el código. Por lo que yo entiendo quieres encontrar los nacidos entre, por ejemplo, hoy 4 de abril y el 19 de abril ambos inclusive.
| Código: |
#include <stdio.h>
Word Day, Month, Year
char Desde[11] = "\0";
char Hasta[11] = "\0";
DecodeDate(Date(), Year, Month, Day);
sprintf(Desde, "%02d/%02d/%04d", Month, Day, Year);
DecodeDate(Date() + 15, Year, Month, Day);
sprintf(Hasta,"%02d/%02d/%04d", Month, Day, Year);
|
Esto sería si guardas las fechas con formato dd/mm/aaaa. Si guardas con formato dd/mm/aa la conversión de fechas sería:
| Código: |
char Desde[9] = "\0";
char Hasta[9] = "\0";
DecodeDate(Date(), Year, Month, Day);
sprintf(Desde, "%02d/%02d/%02d", Month, Day, Year%100);
DecodeDate(Date() + 15, Year, Month, Day);
sprintf(Hasta,"%02d/%02d/%02d", Month, Day, Year%100);
|
El formato de la instrucción sprintf dependería del formato en que guardes la fecha. Y la instrucción SQL te quedaría de la siguiente forma:
| Código: |
SELECT * FROM Tabla
WHERE Fecha_Nacimiento BETWEEN ‘" + AnsiString(Desde) + "’ AND ‘" + AnsiString(Hasta)
|
|
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|