Este post es similar al que comparte mario heredia.
http://www.forosdelweb.com/f100/como...a-edad-720984/
En una sola consulta quedaría
Código SQL:
Ver originalSELECT FLOOR(months_between(sysdate, to_date('&&fecha','YYYY-MM-DD'))/12) || ' Años ' ||
FLOOR(MOD(months_between(sysdate, to_date('&&fecha','YYYY-MM-DD')),12)) || ' Meses ' ||
FLOOR((MOD(months_between(sysdate, to_date('&&fecha','YYYY-MM-DD')),12) - FLOOR(MOD(months_between(sysdate, to_date('&fecha','YYYY-MM-DD')),12)))*30) || ' Dias' AS edad
FROM dual;
La razón por la que se generan números negativos es por que las funciones to_date y to_char realiza operaciones entre las fechas basada en el siglo comprendido entre 1950 y 2049.
Estas seguro que la fecha que tienes almacenada es inferior a 1950? fec_nacimiento que tipo de dato tiene?
Cuando ejecutas
Código SQL:
Ver originalSELECT
e.cod_socio,
e.fec_nacimiento,
to_char(e.fec_nacimiento,'YYYY-MM-DD') AS fecha
FROM soc_socio e
WHERE e.cod_empresa = '001'
AND e.cod_sucursal = '003'
AND e.tip_estado = 'A'
AND e.fec_nacimiento < to_date('1950-01-01','YYYY-MM-DD')
te retorna valores?
saludos