Ho una colonna "creata" con il tipo timestamp without time zone default now()
in un database PostgreSQL.
Se seleziono colonne, ha un formato piacevole e leggibile per impostazione predefinita:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Ma vorrei ottenere il timestamp in soli millisecondi (come Long). Qualcosa come questo:
SELEZIONA myformat (creato) DA mytable;
created
-----------------
2432432343876944
Come posso ottenere la colonna timestamp in soli millisecondi da PostgreSQL?
Risposta a Jack:
Ricevo la stessa differenza di te (-3600), ma se lo uso timestamp with time zone
posso vedere che "l'errore" o la differenza è perché "1970-01-01" ottiene il fuso orario +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)
La differenza è un bug? Potrei essere a causa di "Ora legale" al momento?
Interessante anche durante l'utilizzo to_timestamp()
per inserire data e ora 0 e 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