Tengo una columna "creada" con el tipo timestamp without time zone default now()
en una base de datos PostgreSQL.
Si selecciono columnas, tiene un formato agradable y legible por defecto:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Pero me gustaría obtener la marca de tiempo en solo milisegundos (como Long). Algo como esto:
SELECCIONE myformat (creado) DESDE mytable;
created
-----------------
2432432343876944
¿Cómo puedo obtener la columna de marca de tiempo en solo milisegundos de PostgreSQL?
Respuesta a Jack:
Recibo la misma diferencia que usted (-3600), pero si lo uso timestamp with time zone
, puedo ver que el "error" o la diferencia se debe a que '1970-01-01' tiene zona horaria +01
.
create table my_table_2(created timestamp with time zone);
CREATE TABLE
insert into my_table_2 (created) values (now()), ('1970-01-01');
INSERT 0 2
select created, extract(epoch from created) from my_table_2;
created | date_part
-------------------------------+------------------
2011-05-18 11:03:16.909338+02 | 1305709396.90934
1970-01-01 00:00:00+01 | -3600
(2 rows)
¿Es la diferencia un error? ¿Puedo ser debido a "Horario de verano" en este momento?
También es interesante mientras se usa to_timestamp()
para insertar la marca de tiempo 0 y 1.
insert into my_table_2 (created) values (to_timestamp(0));
INSERT 0 1
insert into my_table_2 (created) values (to_timestamp(1));
INSERT 0 1
select created, extract(epoch from created) from my_table_2;
created | date_part
-------------------------------+------------------
2011-05-18 11:03:16.909338+02 | 1305709396.90934
1970-01-01 00:00:00+01 | -3600
1970-01-01 01:00:00+01 | 0
1970-01-01 01:00:01+01 | 1
fuente