Re: Duda entre horas

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
Thread:
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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Moises Alberto Lindo Gutarra 2008-02-21 14:38:37 Re: Postgresql + PHP
Previous Message Verny Mata 2008-02-21 14:25:28 Postgresql + PHP