Duda entre horas

Lists: pgsql-es-ayuda
From: "Christian Ortiz" <cpalst(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Duda entre horas
Date: 2008-02-20 16:38:45
Message-ID: 655c646a0802200838t1b64d87cp20b160caeed5c6ac@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Holas
etoy haciendo un procedimiento almacenado (plgsql), quiero calcular la
cantidad de horas q hay entre otras dos, solo q la ultima deseo q este en
numeric

se q puedo hacer esto select (horafin - horainicio), pero quiero almacenarlo
en una variable numeric, como puedo hacer la conversion?

--
Christian


From: "Javier Carlos" <nediam(at)nediam(dot)com(dot)mx>
To: "Christian Ortiz" <cpalst(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda entre horas
Date: 2008-02-20 22:10:20
Message-ID: 3009.201.139.146.210.1203545420.squirrel@mail.nediam.com.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda


On Wed, February 20, 2008 10:38 am, Christian Ortiz wrote:
> Holas
> etoy haciendo un procedimiento almacenado (plgsql), quiero calcular la
> cantidad de horas q hay entre otras dos, solo q la ultima deseo q este en
> numeric
>
> se q puedo hacer esto select (horafin - horainicio), pero quiero
> almacenarlo
> en una variable numeric, como puedo hacer la conversion?
>
> --
> Christian
>

Se me ocurre lo siguiente, son sentencias en SQL, pero fácilmente las
puedes incorporar a tu procedimiento almacenado:

--Suponiendo que lo que quieres es la diferencia en minutos, la columna
diferencia será de tipo numeric (que es lo que tú quieres según entiendo):

ALTER TABLE tabla1 ADD COLUMN aux1 INTERVAL;
UPDATE tabla1 SET aux1=horafin-horainicio;

ALTER TABLE tabla1 ADD COLUMN horas integer;
ALTER TABLE tabla1 ADD COLUMN minutos integer;
ALTER TABLE tabla1 ADD COLUMN segundos integer;
ALTER TABLE tabla1 ADD COLUMN diferencia numeric(6,2);

UPDATE tabla1 SET horas=EXTRACT(HOUR FROM aux1);
UPDATE tabla1 SET minutos=EXTRACT(MINUTE FROM aux1);
UPDATE tabla1 SET segundos=EXTRACT(SECOND FROM aux1);
UPDATE tabla1 SET diferencia = (horas*60) + minutos + (segundos/60::float);

Saludos,

Javier

-------------
Javier Carlos - nediam(at)nediam(dot)com(dot)mx - http://nediam.com.mx
GPG key id: 9DFF022C
GPG key fingerprint: 22E7 FEE0 6611 FA86 891D 1755 4C56 403F 9DFF 022C


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Javier Carlos <nediam(at)nediam(dot)com(dot)mx>
Cc: Christian Ortiz <cpalst(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda entre horas
Date: 2008-02-21 14:32:53
Message-ID: 20080221143253.GC7012@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Javier Carlos escribió:

> Se me ocurre lo siguiente, son sentencias en SQL, pero fácilmente las
> puedes incorporar a tu procedimiento almacenado:
>
> --Suponiendo que lo que quieres es la diferencia en minutos, la columna
> diferencia será de tipo numeric (que es lo que tú quieres según entiendo):
>
> ALTER TABLE tabla1 ADD COLUMN aux1 INTERVAL;
> UPDATE tabla1 SET aux1=horafin-horainicio;
>
> ALTER TABLE tabla1 ADD COLUMN horas integer;
> ALTER TABLE tabla1 ADD COLUMN minutos integer;
> ALTER TABLE tabla1 ADD COLUMN segundos integer;
> ALTER TABLE tabla1 ADD COLUMN diferencia numeric(6,2);
>
> UPDATE tabla1 SET horas=EXTRACT(HOUR FROM aux1);
> UPDATE tabla1 SET minutos=EXTRACT(MINUTE FROM aux1);
> UPDATE tabla1 SET segundos=EXTRACT(SECOND FROM aux1);
> UPDATE tabla1 SET diferencia = (horas*60) + minutos + (segundos/60::float);

La estrategia es buena, pero la implementación no mucho porque recorres
la tabla muchas veces. Creo que sería mejor algo como

alter table tabla1 add column diferencia numeric(6,2);
update tabla1
set diferencia = extract(hour from horafin - horainicio) * 60 +
extract(minute from horafin - horainicio) +
extract(second from horafin - horainicio) / 60.0;

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support