Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Restar Fechas en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=78473)

rruffino 23-04-2012 14:32:25

Restar Fechas en Firebird
 
Hola, estoy haciendo un procedimiento almacenado que me calcule la edad de una persona conociendo (o no) su fecha de nacimiento. Estoy usando Firebird 2.1 y la base está en dialecto 3.
Les comento, como la fecha de nacimiento puede ser nula, utilizo la funcion COALESCE para obtener una fecha de nacimiento. Luego la idea es a la fecha actual (CURRENT_DATE) restarle esa fecha y posteriormente extraer el año de esa fecha. El tema es que me tira error cuando hago la resta entre las fechas. He buscado por la web pero no encuentro mucho, o lo que encuentro no da resultados. Adjunto el codigo del procedimiento. Gracias!!
Código SQL [-]
        
   fecha_ini=coalesce(:fecha_nacimiento, CURRENT_DATE);     
   tmp=CURRENT_DATE;
   tmp=:tmp - :fecha_ini;
   edad=EXTRACT(YEAR from :tmp);
   SUSPEND;

Casimiro Notevi 23-04-2012 14:59:01

Creo que no he entendido bien, si quieres saber la diferencia entonces fechafinal - fechainicial.
Pero de ahí por qué quieres extraer el año, ¿el año de qué?.
Ejemplo:
Código Delphi [-]
select cast (('now' - fechacreacion)/365 as integer) from TBCLIENTES

Delphius 23-04-2012 17:16:10

Cita:

Empezado por rruffino (Mensaje 430669)
Hola, estoy haciendo un procedimiento almacenado que me calcule la edad de una persona conociendo (o no) su fecha de nacimiento.

Me parece que algo falla aquí. ¿Cómo se supone que se puede saber la edad de una persona si se desconoce su fecha de nacimiento? :D

Cita:

Empezado por rruffino (Mensaje 430669)
Les comento, como la fecha de nacimiento puede ser nula, utilizo la funcion COALESCE para obtener una fecha de nacimiento. Luego la idea es a la fecha actual (CURRENT_DATE) restarle esa fecha y posteriormente extraer el año de esa fecha. El tema es que me tira error cuando hago la resta entre las fechas. He buscado por la web pero no encuentro mucho, o lo que encuentro no da resultados. Adjunto el codigo del procedimiento. Gracias!!
Código SQL [-] fecha_ini=coalesce(:fecha_nacimiento, CURRENT_DATE); tmp=CURRENT_DATE; tmp=:tmp - :fecha_ini; edad=EXTRACT(YEAR from :tmp); SUSPEND;

Si fuera nula en fecha ini tendrías justamente la FECHA ACTUAL. Como en tmp también tienes la fecha actual, dicha resta queda en cero. Es obvio que eso no calcula la edad... Replantéate la lógica.

Saludos,

ecfisa 23-04-2012 19:22:20

Hola.

Totalmente de acuerdo con ambos.

Me parece lógicamente incorrecto forzar el valor de la edad del campo fecha_ini. NULL es igual a desconocido y es la respuesta que corresponde dar acerca de la edad de una persona, si se ignora su fecha de nacimiento.

Y tampoco alcanzo a comprender el por qué del procedimiento como para sugerir alguna alternativa...

Saludos.


La franja horaria es GMT +2. Ahora son las 13:30:12.

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