Home » Non-English Forums » Spanish » Tipo de dato timestamp (10g, XE)
Tipo de dato timestamp [message #473743] Tue, 31 August 2010 10:27 Go to next message
aguinav29
Messages: 28
Registered: August 2010
Location: CR
Junior Member

Buenos dias amigos.... la pregunta es la seguiente. Estoy desarrollando una pequeña aplicacion con Oracle aplication express (Apex 3.2.1), en una tabla tengo varios datos definidos como timestamp el cual me permite guardar dias, horas, minutos y segundos ahi todo va bien, pero a la hora de restar esos datos por ejemplo
select fecha_despacho_frontera - fecha_arribo_frontera from redestino
el resultado de esta resta, que es para saber cuento tiempo estubo en frontera, es el sgte
0 2:14:0.0
eso quiere decir que estuvo 0 dias, 2 horas , 14 minitos y 0 segundos, lo que pasa es que este resultado lo tengo que guardar en un campo, mi duda es que de que tipo de dato debo declarar este campo que almacena ese resultado??? lo he declarado como varchar2, number, date, pero a la hora de que lo paso a varchar el resultado
select to_char(fecha_despacho_frontera - fecha_arribo_frontera ,'dd/mm/yyyy dd:hh:mi:ss')  from redestino
este es el resultado
+000000000 02:14:00.000000 
asi lo puedo guardar en ese campo pero declarado como varchar2, pero la idea no es que se vea asi sino como la primer opcion! Slds y gracias por la ayuda que me puedan dar!
Re: Tipo de dato timestamp [message #473779 is a reply to message #473743] Tue, 31 August 2010 12:12 Go to previous messageGo to next message
Barbara Boehmer
Messages: 9077
Registered: November 2002
Location: California, USA
Senior Member
SCOTT@orcl_11gR2> create table redestino
  2    (fecha_despacho_frontera  timestamp,
  3  	fecha_arribo_frontera	 timestamp,
  4  	tiempo_en_frontera	 varchar2 (12))
  5  /

Table created.

SCOTT@orcl_11gR2> insert all
  2  into redestino values (systimestamp, systimestamp-(1/7), null)
  3  into redestino values (systimestamp, systimestamp-(13/7), null)
  4  select * from dual
  5  /

2 rows created.

SCOTT@orcl_11gR2> column fecha_despacho_frontera format a28
SCOTT@orcl_11gR2> column fecha_arribo_frontera	 format a28
SCOTT@orcl_11gR2> column tiempo_en_frontera	 format a18
SCOTT@orcl_11gR2> select * from redestino
  2  /

FECHA_DESPACHO_FRONTERA      FECHA_ARRIBO_FRONTERA        TIEMPO_EN_FRONTERA
---------------------------- ---------------------------- ------------------
31-AUG-10 10.10.46.332000 AM 31-AUG-10 06.45.03.000000 AM
31-AUG-10 10.10.46.332000 AM 29-AUG-10 01.36.29.000000 PM

2 rows selected.

SCOTT@orcl_11gR2> select fecha_despacho_frontera - fecha_arribo_frontera
  2  from   redestino
  3  /

FECHA_DESPACHO_FRONTERA-FECHA_ARRIBO_FRONTERA
---------------------------------------------------------------------------
+000000000 03:25:43.332000
+000000001 20:34:17.332000

2 rows selected.

SCOTT@orcl_11gR2> select extract (day from fecha_despacho_frontera - fecha_arribo_frontera)
  2  	    || ' '
  3  	    || lpad (extract (hour from fecha_despacho_frontera - fecha_arribo_frontera), 2, '0')
  4  	    || ':'
  5  	    || lpad (extract (minute from fecha_despacho_frontera - fecha_arribo_frontera), 2, '0')
  6  	    || ':'
  7  	    || lpad (trunc (extract (second from fecha_despacho_frontera - fecha_arribo_frontera)), 2, '0')
  8  from   redestino
  9  /

EXTRACT(DAYFROMFECHA_DESPACHO_FRONTERA-FECHA_ARRIBO_FRONTERA)||''||
-------------------------------------------------------------------
0 03:25:43
1 20:34:17

2 rows selected.

SCOTT@orcl_11gR2> update redestino
  2  set    tiempo_en_frontera =
  3  	    extract (day from fecha_despacho_frontera - fecha_arribo_frontera)
  4  	    || ' '
  5  	    || lpad (extract (hour from fecha_despacho_frontera - fecha_arribo_frontera), 2, '0')
  6  	    || ':'
  7  	    || lpad (extract (minute from fecha_despacho_frontera - fecha_arribo_frontera), 2, '0')
  8  	    || ':'
  9  	    || lpad (trunc (extract (second from fecha_despacho_frontera - fecha_arribo_frontera)), 2, '0')
 10  /

2 rows updated.

SCOTT@orcl_11gR2> select * from redestino
  2  /

FECHA_DESPACHO_FRONTERA      FECHA_ARRIBO_FRONTERA        TIEMPO_EN_FRONTERA
---------------------------- ---------------------------- ------------------
31-AUG-10 10.10.46.332000 AM 31-AUG-10 06.45.03.000000 AM 0 03:25:43
31-AUG-10 10.10.46.332000 AM 29-AUG-10 01.36.29.000000 PM 1 20:34:17

2 rows selected.

SCOTT@orcl_11gR2>

Re: Tipo de dato timestamp [message #473783 is a reply to message #473779] Tue, 31 August 2010 12:27 Go to previous messageGo to next message
aguinav29
Messages: 28
Registered: August 2010
Location: CR
Junior Member

Excelente barbara, muchas gracias me sirvio perfectamente, te lo agradezco mucho!!!!! Slds Smile
Re: Tipo de dato timestamp [message #473801 is a reply to message #473783] Tue, 31 August 2010 13:22 Go to previous messageGo to next message
Michel Cadot
Messages: 68624
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
Another way is:
SQL> create table redestino
  2     (fecha_despacho_frontera  timestamp,
  3      fecha_arribo_frontera  timestamp,
  4      tiempo_en_frontera  varchar2 (12))
  5  /

Table created.

SQL> insert all
  2    into redestino values (systimestamp, systimestamp-(1/7), null)
  3    into redestino values (systimestamp, systimestamp-(13/7), null)
  4  select * from dual
  5  /

2 rows created.

SQL> column fecha_despacho_frontera format a28
SQL> column fecha_arribo_frontera  format a28
SQL> column tiempo_en_frontera  format a18
SQL> select * from redestino;
FECHA_DESPACHO_FRONTERA      FECHA_ARRIBO_FRONTERA        TIEMPO_EN_FRONTERA
---------------------------- ---------------------------- ------------------
31/08/2010 20:17:03.484      31/08/2010 16:51:20.000
31/08/2010 20:17:03.484      29/08/2010 23:42:46.000

2 rows selected.

SQL> select trunc(diff)||' '||to_char(to_date(round(mod(diff,1)*86400),'SSSSS'),'HH24:MI:SS') 
  2  from (select (fecha_despacho_frontera+0) - (fecha_arribo_frontera+0) diff
  3        from redestino)
  4  /
TRUNC(DIFF)||''||TO_CHAR(TO_DATE(ROUND(MOD(DIFF,1
-------------------------------------------------
0 03:25:43
1 20:34:17

2 rows selected.

SQL> update redestino
  2  set tiempo_en_frontera = 
  3      trunc((fecha_despacho_frontera+0) - (fecha_arribo_frontera+0))
  4      ||' '||
  5      to_char(to_date(round(mod((fecha_despacho_frontera+0) - (fecha_arribo_frontera+0),1)*86400),
  6                      'SSSSS'),
  7              'HH24:MI:SS') 
  8  /

2 rows updated.

SQL> select * from redestino;
FECHA_DESPACHO_FRONTERA      FECHA_ARRIBO_FRONTERA        TIEMPO_EN_FRONTERA
---------------------------- ---------------------------- ------------------
31/08/2010 20:17:03.484      31/08/2010 16:51:20.000      0 03:25:43
31/08/2010 20:17:03.484      29/08/2010 23:42:46.000      1 20:34:17

2 rows selected.

Regards
Michel
Re: Tipo de dato timestamp [message #473815 is a reply to message #473801] Tue, 31 August 2010 15:20 Go to previous message
aguinav29
Messages: 28
Registered: August 2010
Location: CR
Junior Member

Gracias michel, por esta otra opcion!!!
Previous Topic: Error ora-22288
Next Topic: Envio de correo por medio del utl_smtp oracle forms
Goto Forum:
  


Current Time: Thu Mar 28 07:06:50 CDT 2024