From: | Francisco Olarte <folarte(at)peoplecall(dot)com> |
---|---|
To: | Hellmuth Vargas <hivs77(at)gmail(dot)com> |
Cc: | Magi Franquesa <magifranquesa(at)gmail(dot)com>, Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: campos timestamp |
Date: | 2016-10-06 14:19:32 |
Message-ID: | CA+bJJbwX2NDbL+Lq3hZnpYKJRt8kfGWw98ucvDJ4otSYq6LytA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola Hellmuth...
2016-10-06 14:54 GMT+02:00 Hellmuth Vargas <hivs77(at)gmail(dot)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(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda
From | Date | Subject | |
---|---|---|---|
Next Message | Sebastián | 2016-10-06 17:58:51 | Access como frontend |
Previous Message | Hellmuth Vargas | 2016-10-06 12:54:32 | Re: campos timestamp |