Diferencia de fechas entre cumpleaños y fecha actual

Tengo una tabla ( tbl_Datos) con los siguientes campos

Lugar
Apellido
Nombre
Fecha Nacimiento
Domicilio

Lo que necesito sobre esa tabla es una consulta que me arroje lo siguiente:

Sobre el campo Fecha Nacimiento, pueda obtener lo siguiente:

Que me arroje cuantos año tiene al día de hoy
Y en otra consulta que cuando pase el 1ºde Julio la persona que cumpla antes y después de esa fecha
sea el mes que sea la pase para antes o después de esa fecha Por ejemplo si cumple en mayo que esa persona
se quede comprendida en el bloque del 1 semestre

Es a los efectos de hacer un censo

O si alguien tiene un Ejemplo hecho si me lo pueden pasar

2 respuestas

Respuesta
1

¿La consulta la necesitas para Access o en SQL?

Access,

gracias

Pon en la consulta de Access en vista SQL, y debería de ser algo así:

SELECT YEAR(Now())- Year(tbl_Datos.FecNacimiento) AS Años, IIF (MONTH(tbl_Datos.FecNacimiento)<7, 1, 2)  as Semestre FROM tbl_Datos;

Comprueba que el nombre de las tablas sea como yo indico en la consulta.

OK funciona bien, pero que hago si quiero agregarle otros campos de la tabla, probé en forma de diseño agregarle el campo apellido y me tira el siguiente error: ""la función [siInm] no esta definida en la expresión"", te nombro el campo apellido como cualquier otro campo de la tabla

Gracias, y te valoro desde ya la respuesta

¿La función SiInm?

Bueno, en cualquier caso, para añadir cualquier campo de la tabla a la consulta solo debes de meterla de la siguiente forma:

SELECT YEAR(Now())- Year(tbl_Datos.FecNacimiento) AS Años, IIF (MONTH(tbl_Datos.FecNacimiento)<7, 1, 2)  as Semestre, CAMPO_NUEVO1, CAMPO_NUEVO2 FROM tbl_Datos;

Donde CAMPO_NUEVO1 puede ser, en el caso concreto que me dices, tlb_Datos.apellido

CAMPO_NUEVO2 pues por ejemplo puede ser tlb_Datos.domicilio

Y así con todos lo campos que quiera introducir.

Concretamente, y suponiendo que sólo vas a a añadir apellido, sería así:

SELECT YEAR(Now())- Year(tbl_Datos.FecNacimiento) AS Años, IIF (MONTH(tbl_Datos.FecNacimiento)<7, 1, 2)  as Semestre, tlb_Datos.apellido FROM tbl_Datos;

Respuesta
1

En esta respuesta, o en esta otra, tienes una función para calcular la fecha. En tu consulta has de añadir un campo con este nombre (has de usar el de la función que pongas en tu módulo):

Edad: fncEdad([Fecha de nacimiento])

El otro campo de la consulta lo has de hacer usando la función SiInm, por ejemplo:

Semestre: SiInm(Mes([Fecha de nacimiento])<7;"1º Semestre";"2º Semestre")

No es por menospreciar la respuesta del compañero, que no es mi intención, pero indicarte que usar sólo la diferencia de los años de la fecha actual y de la fecha de nacimiento te devolverá resultados erróneos si la fecha actual (día y mes) es anterior a los de nacimiento, concretamente un año de más.

Lo puedes comprobar fácilmente poniendo como fecha de nacimiento, por ejemplo, el 06/10/2010. Te dirá que tiene 5 años cuando realmente aún tiene 4.

Si embargo, usando alguna de las fórmulas personalizadas, te devolverá la edad correcta en cualquier caso, pues dichas fórmulas, analizan también los meses y días, y no sólo los años.

Si he probado la fecha que me sugieres y marca 5 años, y verdaderamente al día de hoy no tiene 5 tiene 4.

Serias tan amable de enviarme por separado tu fórmula y donde ponerla, si en una consulta de sql o en algún modulo por separado. Pero tené a bien indicarme bien donde colocarla porque probé la instrucción que tienes más arriba en sql y no me funciona

Gracias

La fórmula, por ejemplo esta:

'------------------------------------------------------------------------------------------------'Función para calcular la edad'------------------------------------------------------------------------------------------------Public Function fncEdad(FechaNac As Date) As Integer'Analizamos el mes de la fecha actualSelect Case Month(Date)    Case Is > Month(FechaNac)        'Si es mayor que el mes de la fecha de nacimiento, la edad es la diferencia de años        fncEdad = DateDiff("yyyy", FechaNac, Date)    Case Is < Month(FechaNac)        'Si es menor que el mes de la fecha de nacimiento, la edad es la diferencia de años menos uno,        'pues aún no ha cumplido este año        fncEdad = DateDiff("yyyy", FechaNac, Date) - 1    Case Is = Month(FechaNac)        'Si estamos en el mismo mes, hay que analizar el día, para saber si ya ha cumplido o no        If Day(Date) < Day(FechaNac) Then 'Si el día actual es menor, aun no cumplió            fncEdad = DateDiff("yyyy", FechaNac, Date) - 1        Else            fncEdad = DateDiff("yyyy", FechaNac, Date)        End IfEnd SelectEnd Function

la tienes que poner en un módulo separado.

Luego abres tu consulta en vista diseño, y cambias donde te pone:

Años: Año(Ahora)-Año([Fecha Nacimiento])

por:

Años: fncEdad([Fecha Nacimiento])

Un saludo, y se agradecería un cambio en la valoración... jejeje

Ok, estoy cada vez más perdido te pongo mi ejemplo, SI podes intenta ayudarme con este ejemplo, desde ya te agradezco y te valoro la respuesta anterior

https://www.dropbox.com/s/iw2yezss4uky4jh/Cumpleanos.accdb?dl=0 

Ahí lo tienes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas