Re: campos timestamp

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Magi Franquesa <magifranquesa(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: campos timestamp
Date: 2016-10-06 18:10:05
Message-ID: 20161006181005.GA715672@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Magi Franquesa escribió:
> Hola,
>
> Tengo una bd con registros de incendios en los que se indica la fecha y
> hora de inicio en un campo de tipo "timestamp with time zone", pero el
> problema es que en lugar de un solo campo con ambos datos hay dos campos:
> uno que contiene la fecha correcta y el segundo la hora. Necesito crear un
> nuevo campo del mismo tipo con la fecha y hora como muestro en el ejemplo
> siguiente:
>
> Campo 1 (fecha inicio):"*1968-09-08* 00:00:00+01"
> Campo 2 (hora inicio): "1900-01-01 *10:00:00+00*"
> Resultado buscado: "*1968-09-08 10:00:00+00*"

Haz un cast de cada uno al tipo correcto, y luego los juntas sumándolos:

alvherre=# create table magi (fecha timestamptz, hora timestamptz);
CREATE TABLE
alvherre=# insert into magi values ('1968-09-08 00:00:00+01', '1900-01-01 10:00:00+00' at time zone 'UTC');
INSERT 0 1

alvherre=# select fecha, hora from magi;
fecha │ hora
────────────────────────┼──────────────────────────────
1968-09-07 19:00:00-04 │ 1900-01-01 10:00:00-04:42:46
(1 fila)

alvherre=# select fecha::date, hora::time, fecha::date + hora::time from magi;
fecha │ hora │ ?column?
────────────┼──────────┼─────────────────────
1968-09-07 │ 10:00:00 │ 1968-09-07 10:00:00
(1 fila)

Observa que los valores de los husos horarios son "divertidos". Querrás
ajustar eso, quizás. Puedes usar el operador AT TIME ZONE; mira el
manual y experimenta un poco a ver si encuentras algo que tenga sentido.
Considera que el tipo "time" no lleva huso horario, en cambio "time with
time zone" sí lo lleva. Igualmente, el tipo "timestamp" no lleva huso
horario, y "timestamp with time zone" sí lo lleva.

Considera también que un dato con huso horario significa "un dato que
está almacenado en UTC y que se convierte al huso horario configurado en
el parámetro TimeZone al momento de mostrarlo". Al momento de guardar,
el dato se transforma desde el parámetro TimeZone a UTC. Si no tienes
este efecto en cuenta, puede ser un poco confuso.

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Lazaro Garcia 2016-10-06 20:57:47 Pruebas de carga PostgreSQL vs SQLServer
Previous Message Sebastián 2016-10-06 17:58:51 Access como frontend