Oracle - Calculo de tiempo entre dos fechas

   
Vista:

Calculo de tiempo entre dos fechas

Publicado por Heiver Perez (2 intervenciones) el 23/02/2016 16:52:59
Hola Amigos


Tengo el siguiente problema
necesito hacer un calculo entre dos fechas por ejemplo
23/05/1992 y 23/02/2016 y que como resultado me de
23 años
9 meses
0 días

en sql server lo logre hacer con el siguiente procedimiento



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
CREATE PROCEDURE SPBICALCULARTIEMPOSERVICIO
AS
BEGIN
  DECLARE
  @LRMTHVEX INTEGER,
  @LCODEMPL NUMERIC(13),
  @LFECINGR DATETIME,
  @LFECHA datetime,
  @LTMPFECH datetime,
  @LANIOS int,
  @LMESES int,
  @LDIAS int
 
  DECLARE C_HVEXT CURSOR FOR (SELECT RMT_HVEX, COD_EMPL, FEC_INGR FROM BI_HVEXT WHERE EMP_ACTU = 'S');
  OPEN C_HVEXT;
  FETCH NEXT FROM C_HVEXT INTO @LRMTHVEX, @LCODEMPL, @LFECINGR;
  WHILE @@FETCH_STATUS = 0
  BEGIN
 
	SELECT @LFECHA = @LFECINGR
 
	SELECT @LTMPFECH = @LFECHA
 
	SELECT @LANIOS = DATEDIFF(yy, @LTMPFECH, GETDATE()) - CASE WHEN (MONTH(@LFECHA) > MONTH(GETDATE())) OR (MONTH(@LFECHA) = MONTH(GETDATE()) AND DAY(@LFECHA) > DAY(GETDATE())) THEN 1 ELSE 0 END
	SELECT @LTMPFECH = DATEADD(yy, @LANIOS, @LTMPFECH)
	SELECT @LMESES = DATEDIFF(m, @LTMPFECH, GETDATE()) - CASE WHEN DAY(@LFECHA) > DAY(GETDATE()) THEN 1 ELSE 0 END
	SELECT @LTMPFECH = DATEADD(m, @LMESES, @LTMPFECH)
	SELECT @LDIAS = DATEDIFF(d, @LTMPFECH, GETDATE())
 
	SELECT @LRMTHVEX, @LANIOS, @LMESES, @LDIAS
 
	UPDATE BI_HVEXT SET ANO_SERV = @LANIOS,MES_SERV = @LMESES, DIA_SERV = @LDIAS;
 
 
    FETCH NEXT FROM C_HVEXT INTO @LRMTHVEX, @LCODEMPL, @LFECINGR;
  END;
  CLOSE C_HVEXT;
  DEALLOCATE C_HVEXT;
 
 
 
END;
 
GO

pero en oracle no se que funciones me servirán para calcular las fechas

Agradezco mucho su ayuda

Gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Calculo de tiempo entre dos fechas

Publicado por Rafael (178 intervenciones) el 24/02/2016 14:32:02
Yo lo haria asi:

1
2
3
4
5
6
7
8
9
SELECT TRUNC(MONTHS_BETWEEN(TO_DATE('23/02/2016', 'DD/MM/YYYY'),
                            TO_DATE('23/05/1992', 'DD/MM/YYYY')) / 12) AS ANIOS
     , TRUNC(MOD(MONTHS_BETWEEN(TO_DATE('23/02/2016', 'DD/MM/YYYY'),
                                TO_DATE('23/05/1992', 'DD/MM/YYYY')), 12)) AS MESES
     , TRUNC(TO_DATE('23/02/2016', 'DD/MM/YYYY') -
             ADD_MONTHS(TO_DATE('23/05/1992', 'DD/MM/YYYY'), TRUNC(MONTHS_BETWEEN(TO_DATE('23/02/2016', 'DD/MM/YYYY'),
                                                                                  TO_DATE('23/05/1992', 'DD/MM/YYYY'))))) AS DIAS
FROM   DUAL
;

Aqui la muestra de la ejecucion:
Imagen

Supongo que es lo que necesitas.

Saludos


Pd. Si te sirve esta informacion a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Calculo de tiempo entre dos fechas

Publicado por Heiver (2 intervenciones) el 24/02/2016 17:09:06
Muchas Gracias

Me ha servido bastante
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar