Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Resultado Desafio. Resta de Fechas, resultado en años, meses, semanas y dias.

Estas en el tema de Resultado Desafio. Resta de Fechas, resultado en años, meses, semanas y dias. en el foro de Oracle en Foros del Web. Bueno... lo prometido es deuda y espero que este "juego" haya sido divertido, como lo fue para mi. Bueno.. aqui la consulta. Código: SELECT TRUNC(SYSDATE) ...
  #1 (permalink)  
Antiguo 10/12/2007, 10:04
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años
Puntos: 3
Resultado Desafio. Resta de Fechas, resultado en años, meses, semanas y dias.

Bueno... lo prometido es deuda y espero que este "juego" haya sido divertido,
como lo fue para mi.

Bueno.. aqui la consulta.

Código:

SELECT TRUNC(SYSDATE) DIA_DE_HOY,
       TO_DATE('&FECHA','DD.MM.YYYY') ENTRADA,
       '&NOMBRE, '||
       DECODE(ANIOS, 0,
              DECODE(MESES, 0, 
                     DECODE(SEMANAS, 0, 
                            DECODE(DIAS, 0, 'acaba de nacer.', 'tiene '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. '),
                                   'tiene '||SEMANAS||DECODE(SEMANAS, 1, ' semana', ' semanas')||DECODE(DIAS, 0, ' de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. ')
                           ), 'tiene '||MESES||DECODE(MESES, 1, ' mes', ' meses')||
                     DECODE(SEMANAS, 0, DECODE(DIAS, 0, ' de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. '),
                            DECODE(DIAS, 0, ' y ', ', ')||SEMANAS||DECODE(SEMANAS, 1, ' semana', ' semanas')||DECODE(DIAS, 0, 'de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. '))),
              'tiene '||ANIOS||DECODE(ANIOS, 1, ' anio', ' anios')||
              DECODE(MESES, 0, 
                     DECODE(SEMANAS, 0, 
                            DECODE(DIAS, 0, ' de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. '),
                                   DECODE(DIAS, 0, ' y ', ', ')||SEMANAS||DECODE(SEMANAS, 1, ' semana', ' semanas')||DECODE(DIAS, 0, 'de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. ')
                           ), DECODE(DIAS + SEMANAS, 0, ' y ', ', ')||MESES||DECODE(MESES, 1, ' mes', ' meses')||
                     DECODE(SEMANAS, 0, DECODE(DIAS, 0, ' de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. '),
                            DECODE(DIAS, 0, ' y ', ', ')||SEMANAS||DECODE(SEMANAS, 1, ' semana', ' semanas')||DECODE(DIAS, 0, ' de vida.', ' y '||DIAS||DECODE(DIAS, 1, ' dia', ' dias')||' de vida. ')))) EDAD
  FROM (
SELECT ANIOS,
       MESES,
       NVL(FLOOR(DIAS / 7), 0) SEMANAS,
       NVL(MOD(DIAS, 7), 0) DIAS
  FROM (
SELECT CASE WHEN MESES >= 12 THEN FLOOR(MESES / 12)
            ELSE 0 END ANIOS,
       CASE WHEN MESES >= 12 THEN MOD(MESES , 12)
            ELSE MESES END MESES,
       CASE WHEN DIA > DIA_ACTUAL THEN DIA - 1 ELSE DIA END DIAS
  FROM (
SELECT NVL(MESES, 0) MESES,
       DECODE(RESTO, 0, 0,
                     0.03, 01, 0.06, 02, 0.09, 03, 0.12, 04, 0.16, 05, 0.19, 06, 0.22, 07, 0.25, 08, 0.29, 09, 0.32, 10, 
                     0.35, 11, 0.38, 12, 0.41, 13, 0.45, 14, 0.48, 15, 0.51, 16, 0.54, 17, 0.58, 18, 0.61, 19, 0.64, 20,
                     0.67, 21, 0.70, 22, 0.74, 23, 0.77, 24, 0.80, 25, 0.83, 26, 0.87, 27, 0.90, 28, 0.93, 29, 0.96, 30 
             ) DIA,
       DIA_ACTUAL
  FROM (
SELECT DECODE(DIFERENCIA, 0, 0, DECODE(INSTR( DIFERENCIA, '.'), 0, DIFERENCIA, TO_NUMBER(SUBSTR( DIFERENCIA, 1, INSTR( DIFERENCIA, '.') -1)))) MESES, 
       DECODE(DIFERENCIA, 0, 0, DECODE(INSTR( DIFERENCIA, '.'), 0, 0, SUBSTR( DIFERENCIA, INSTR( DIFERENCIA, '.'), 3))) RESTO,
       DIA_ACTUAL
  FROM (
SELECT NVL(MONTHS_BETWEEN(TO_CHAR(TRUNC(SYSDATE), 'DD-MON-YYYY'),
                      TO_CHAR(TO_DATE('&FECHA','DD.MM.YYYY'), 'DD-MON-YYYY')), 0) DIFERENCIA,
       TO_CHAR(TRUNC(SYSDATE), 'DD') DIA_ACTUAL
  FROM DUAL
       )))))
Ahora puedo saber la edad de mi hijo Santiago expresada en años, si hubiere años, meses, si hubiere meses, semanas, si hubiere semanas y dias, si hubiera dias.

Sldo Atte, Mario.
  #2 (permalink)  
Antiguo 10/12/2007, 13:02
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Resultado Desafio. Resta de Fechas, resultado en años, meses, semanas y dias.

Hola,

Copy/Paste y derechito al repositorio de scripts...

Saludos y gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:20.