Diego
Mire esta:
Código sql:
Ver originalCREATE OR REPLACE FUNCTION edades(fec_nac IN DATE) RETURN VARCHAR2
AS
edad_anos NUMBER;
edad_meses NUMBER;
edad_dias NUMBER;
edad varchar2(40);
BEGIN
SELECT FLOOR(months_between(sysdate, fec_nac)/12) INTO edad_anos FROM dual;
SELECT FLOOR(MOD(months_between(sysdate, fec_nac),12)) INTO edad_meses FROM dual;
SELECT FLOOR(
(MOD(months_between(sysdate, fec_nac),12)
- FLOOR(MOD(months_between(sysdate, fec_nac),12)))*30
) INTO edad_dias
FROM dual;
SELECT (CAST(edad_anos AS varchar2(10))||' anos '||CAST(edad_meses AS varchar2(10))||' Meses '||CAST(edad_dias AS varchar2(10))||' Dias ') INTO edad FROM dual;
RETURN edad;
END edades;
Para llamarla debe ser
Código sql:
Ver originalSELECT edades(to_date('1984-11-12','YYYY-MM-DD')) FROM dual;
EDAD
---------------------------------
24 anos 8 Meses 10 Dias
1 ROWS selected
Donde el parámetro de entrada es la fecha de nacimiento.
Devuelve los años,meses y días que tiene la persona.
El uso de numtoyminterval, corresponde a convertir un numero para ser mostrado en formato año-mes, pero no sería posible mostrar también los días.
El uso correcto de numtoyminterval es
Código sql:
Ver originalSELECT numtoyminterval(months_between(sysdate,to_date('1984-11-12','YYYY-MM-DD')),'month') fecha FROM dual;
FECHA
------------------------
+0000000024-08
1 ROWS selected
Donde se establece la conversión de un numero indicado en meses, para ser mostrado en formato año-mes.
Sin embargo, es mas elegante la primera función.
Espero le sirva viejo