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