Ver Mensaje Individual
  #89 (permalink)  
Antiguo 04/08/2011, 13:20
Avatar de mauriciolangea
mauriciolangea
 
Fecha de Ingreso: enero-2002
Mensajes: 59
Antigüedad: 22 años, 10 meses
Puntos: 0
Respuesta: Firebird

Cita:
Iniciado por mauriciolangea Ver Mensaje
Descripción : ¿Cómo calculo la edad desde un campo fecha en Firebird?

Respuesta:
Asumiendo que la tabla1 contiene un campo tipo fecha con la información de la fecha de nacimiento ...

SELECT EXTRACT(YEAR FROM current_date) - EXTRACT(YEAR FROM campo_fecha)
- CASE WHEN EXTRACT(MONTH FROM current_date) > EXTRACT(MONTH FROM campo_fecha)
THEN 0
ELSE
CASE WHEN EXTRACT(MONTH FROM current_date)
< EXTRACT(MONTH FROM campo_fecha)
THEN 1
ELSE
CASE WHEN EXTRACT(DAY FROM current_date)
< EXTRACT(DAY FROM campo_fecha)
THEN 1
ELSE 0
END
END
END as edad
FROM tabla1
o más sencillo

SELECT CAST((CURRENT_DATE-campo_fecha)/365.25 AS INTEGER) FROM tabla1

Nota : Este script no calcula la edad con meses ni en meses

A tener la necesidad de tener un procedimiento más exacto, llegué a hacer este sencillo Procedimiento Almacenado.

Código:
SET TERM ^ ;
CREATE PROCEDURE CALCULA_EDAD (
    FECHA_NACIMIENTO Date,
    FECHA_HOY Date )
RETURNS (
    EDAD Varchar(60),
    EDAD_ANO Integer,
    EDAD_MES Integer,
    EDAD_DIA Integer )
AS
DECLARE VARIABLE jar   integer;
DECLARE VARIABLE monat integer;
DECLARE VARIABLE dag   integer;
DECLARE VARIABLE ald   date;

DECLARE VARIABLE edadan varchar(30);
DECLARE VARIABLE edadme varchar(30);
DECLARE VARIABLE edaddi varchar(30);
BEGIN
    jar   = extract(year  from FECHA_HOY) - extract(year  from FECHA_NACIMIENTO);
    monat = extract(month from FECHA_HOY) - extract(month from FECHA_NACIMIENTO);
    dag   = extract(day   from FECHA_HOY) - extract(day   from FECHA_NACIMIENTO);

    if (dag < 0) then
       begin
            dag   = 30 - abs(dag);
            monat = monat - 1;
       end
    
    if (monat < 0) then
       begin
            monat = 12 - abs(monat);
            jar   = jar - 1;
       end

    --Arreglo cadena para presentación
    if (jar > 0) then
        if (jar = 1) then
            edadan = jar||' Año ';
        else
            edadan = jar||' Años ';
    else
        if (jar = 0) then
            edadan = '';

    if (monat > 0) Then
        if (monat = 1) then
            edadme = monat||' Mes ';
        else
            edadme = monat||' Meses ';
    else
        if (monat = 0) then
            edadme = '';

    if (dag > 0) then
        if (dag = 1) then
            edaddi = dag||' Día ';
        else
            edaddi = dag||' Días ';
    else
        if (dag = 0) Then
            edaddi = '';

    edad_ano = jar;
    edad_mes = monat;
    edad_dia = dag;

    edad = edadan||edadme||edaddi;

    suspend;

END^
SET TERM ; ^