Hola Hellmuth...

2016-10-06 14:54 GMT+02:00 Hellmuth Vargas <hiv...@gmail.com>:
> Hice el siguuiente ejercicio:
>
> select cast('1968-09-08 00:00:00+01' as timestamp) as fecha,cast('1900-01-01
> 10:00:00+00' as timestamp) as hora, cast('1968-09-08 00:00:00+01' as
> timestamp)+cast(cast('1900-01-01 10:00:00+00' as timestamp) as time) as
> fechahora

Y el resultado fue? porque no lo tengo muy claro. Con las zonas
p*t**ndo de por medio puede que no obtengas el mismo resultado siempre
( aqui utilizas TEXTO, eso es facil, no TSw/TZ, que es lo que pedia el
ejemplo original ).

Mira lo que pasa en mi maquina si cambio las constantes de texto a
timestamp with time zone, como en el ejemplo original:


n=> select cast('1968-09-08 00:00:00+01' as timestamp) as
fecha,cast('1900-01-01 10:00:00+00' as timestamp) as hora,
cast('1968-09-08 00:00:00+01' as timestamp)+cast(cast('1900-01-01
10:00:00+00' as timestamp) as time) as fechahora ;
        fecha        |        hora         |      fechahora
---------------------+---------------------+---------------------
 1968-09-08 00:00:00 | 1900-01-01 10:00:00 | 1968-09-08 10:00:00
(1 row)

n=> select cast('1968-09-08 00:00:00+01'::timestamp with time zone as
timestamp) as fecha,cast('1900-01-01 10:00:00+00'::timestamp with time
zone as timestamp) as hora, cast('1968-09-08 00:00:00+01'::timestamp
with time zone  as timestamp)+cast(cast('1900-01-01
10:00:00+00'::timestamp with time zone as timestamp) as time) as
fechahora;
        fecha        |        hora         |      fechahora
---------------------+---------------------+---------------------
 1968-09-08 00:00:00 | 1900-01-01 09:45:16 | 1968-09-08 09:45:16
(1 row)

Siempre hay conversion de tipos, no hay que olvidar nunca que un
TSw/TZ internamente no es un bonito texto y NO TIENE LA ZONA HORARIA
ALMACENADA ( lo que es evidente si se miran los requisitos de
almacenamiento, que son los mismos para w/ que wo/ TZ ). Internamente
equivalente a un numero real gordo, un punto en la recta del tiempo.
La diferencia es que cuando lo imprimes si es w/TZ el sistema lo
imprime en la TIME ZONE activa en ese momento, mientras que si es
WO/TZ te imprime el equivalente a la zona UTC. Por eso cuando se
quieren guardar 'horas locales', es decir, la hora como la veia el
usuario, hay que guardar dos cosas, la zona del usuario y un timestamp
( este ultimo puede ser w/ o WO/, normalmente es mas facil wo/ pero
ambos valen ).

Francisco Olarte.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a