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

¿Cómo implementar aritmética de hora con ORACLE?

Estas en el tema de ¿Cómo implementar aritmética de hora con ORACLE? en el foro de Oracle en Foros del Web. Hola, cómo están? Les comento mi inquietud: Necesito realizar operaciones aritméticas con datos de hora en la base express de Oracle (sumar horas y minutos) ...
  #1 (permalink)  
Antiguo 01/09/2010, 12:36
Avatar de SangrePura  
Fecha de Ingreso: febrero-2006
Mensajes: 28
Antigüedad: 18 años, 2 meses
Puntos: 0
Pregunta ¿Cómo implementar aritmética de hora con ORACLE?

Hola, cómo están?

Les comento mi inquietud: Necesito realizar operaciones aritméticas con datos de hora en la base express de Oracle (sumar horas y minutos) , nada difícil, sólo que no se me ocurre cómo hacerlo. Por ejemplo, tengo que poner que trabajé 1:40 hs en un determinado proyecto y 1:30 en otro. El problema es que la suma de estos valores se hace a través de NUMBER y me muestra 2 horas y 70 minutos en vez de 3 horas y 10 minutos que sería lo correcto hablando de 'horas'.

Con Apex Express no es complicada la suma de las horas porque son valores numéricos redondos, pero se complica con la suma de los minutos porque la base no sabe que debe tratarlos como minutos en vez de números. Entonces me surge la necesidad de tratar los valores como datos de hora exclusivamente. Se me ocurrió probar con datos TIMESTAMP pero éste es básicamente una extensión de DATE y no creo que se ajuste a mi necesidad.

Agradezco cualquier sugerencia al respecto.
Saludos!
  #2 (permalink)  
Antiguo 01/09/2010, 15:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

podrías postear un ejemplo de lo que haz hecho y de lo que quieres lograr?
Incialmente como consigues que la suma entre 01:40+01:30 te de 02:70?

saludos sangrepura
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 01/09/2010, 19:49
Avatar de SangrePura  
Fecha de Ingreso: febrero-2006
Mensajes: 28
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

Hola huesos52,

Antes que nada, pedir disculpas si mi post está confuso

Mi problema es que las dos columnas que intento sumar son NUMBER:

Código:
horas NUMBER (2) not null,
minutos NUMBER (2) not null,
Entonces no son tratadas como hora que es justo lo que necesito para determinar el tiempo incurrido de trabajo. En realidad, no he sumado 01:40 + 01:30, sino las horas y minutos por separado y luego los concateno con los ":" en otra columna.

Lo que quiero lograr sería algo así:

Código:
insert into trabajo (horas, minutos, proyecto)
values (1, 40, 'proyecto_1');
--------
insert into trabajo (horas, minutos, proyecto)
values (1, 30, 'proyecto_2');
O en su defecto

Código:
insert into trabajo (tiempo_incurrido, proyecto)
values ('1:40', 'proyecto_1');
--------
insert into trabajo (tiempo_incurrido, proyecto)
values ('1:30', 'proyecto_2');
Y luego efectuar la operación correspondiente para obtener 03:10 en vez de 02:70.

En Apex Express tengo la opción de sumar automáticamente las columnas, aunque sólo es válido para el tipo de dato NUMBER. El resultado se muestra en una fila al final del informe.

Desde ya, gracias por tu tiempo!
  #4 (permalink)  
Antiguo 01/09/2010, 21:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

Creo que con la función numtodsinterval puedes lograr eso. Ve mirandola
Mañana le tiro un par de pruebas y te contesto.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 02/09/2010, 07:38
Avatar de SangrePura  
Fecha de Ingreso: febrero-2006
Mensajes: 28
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

Estimado,

He estado investigando esta función, parece ser útil pero aún no me doy cuenta cómo implementarla en mi caso :S

la sintaxis sería:
SELECT to_char(sysdate + numtodsinterval(2, 'HOUR/MINUTE'), 'HH24:MI AM')FROM
dual

pero si quiero poner que trabajé 3:10 ¿cómo opero en función a sysdate?

Muchas gracias por tu dedicación
  #6 (permalink)  
Antiguo 02/09/2010, 07:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

Sangre pura... efectivamente se puede hacer con numtodsinterval

Mira el ejemplo

Código SQL:
Ver original
  1. SQL> CREATE TABLE trabajo(horas NUMBER(2),minutos NUMBER(2),proyecto VARCHAR2(15));
  2.  
  3. Tabla creada.
  4.  
  5. SQL> INSERT INTO trabajo (horas, minutos, proyecto)
  6. VALUES (1, 40, 'proyecto_1');  2
  7.  
  8. 1 fila creada.
  9.  
  10. SQL> INSERT INTO trabajo (horas, minutos, proyecto)
  11. VALUES (1, 30, 'proyecto_2');  2
  12.  
  13. 1 fila creada.
  14.  
  15. SQL> COMMIT;
  16.  
  17. Confirmación terminada.
  18.  
  19. SQL> SELECT
  20. NUMTODSINTERVAL(SUM(horas*3600)+SUM(minutos*60),'SECOND') tiempo
  21. FROM trabajo;  2    3
  22.  
  23. TIEMPO
  24. ---------------------------------------------------------------------------
  25. +000000000 03:10:00.000000000

Si quieres darle un poco de formato para eliminar los ceros y los caracteres que no te sirven, puedes utilizar SUBSTR

Código SQL:
Ver original
  1. SQL> SELECT
  2. SUBSTR(NUMTODSINTERVAL(SUM(horas*3600)+SUM(minutos*60),'SECOND'),11,6) tiempo
  3. FROM trabajo;  2    3
  4.  
  5. TIEMPO
  6. ------------------------
  7.  03:10

Nos cuentas como te va.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 02/09/2010, 08:49
Avatar de SangrePura  
Fecha de Ingreso: febrero-2006
Mensajes: 28
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

Ahora entiendo cómo implementar la función! fue cuestión de tocar un poco hasta ajustarla a mis requisitos, pero básicamente es lo que me explicaste. Excelente el ejemplo!

Sólo me resta implementar la consulta en mi Apex para que genere los resultados a medida que se modifica el informe.

Una vez más, agradecerte por tu paciencia y atención huesos52
Saludos!

PD: Me he pasado por tu sitio y lo veo de gran utilidad, me di el lujo de aprender [URL="http://www.huesos52.260mb.com/index.php/oracle-bd/51-campo-autonumerico-en-oracle.html"]algo[/URL] de allí. Gracias
  #8 (permalink)  
Antiguo 02/09/2010, 08:51
Avatar de SangrePura  
Fecha de Ingreso: febrero-2006
Mensajes: 28
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?

Ahora entiendo cómo implementar la función! fue cuestión de tocar un poco hasta ajustarla a mis requisitos, pero básicamente es lo que me explicaste. Excelente el ejemplo!

Sólo me resta implementar la consulta en mi Apex para que genere los resultados a medida que se modifica el informe.

Una vez más, agradecerte por tu paciencia y atención huesos52
Saludos!

PD: Me he pasado por tu sitio y lo veo de gran utilidad, me di el lujo de aprender [URL="http://www.huesos52.260mb.com/index.php/oracle-bd/51-campo-autonumerico-en-oracle.html"]algo[/URL] de allí. Gracias
  #9 (permalink)  
Antiguo 02/09/2010, 09:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: ¿Cómo implementar aritmética de hora con ORACLE?



saludos sangrepura y me alegra que te haya servido tanto el ejemplo como la info del sitio.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: implementar
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 01:01.