Ich habe eine Spalte "erstellt" mit Typ timestamp without time zone default now()
in einer PostgreSQL-Datenbank.
Wenn ich Spalten auswähle, hat es standardmäßig ein schönes und lesbares Format:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Aber ich möchte den Zeitstempel in nur Millisekunden (als Long) erhalten. Etwas wie das:
SELECT myformat (erstellt) FROM mytable;
created
-----------------
2432432343876944
Wie kann ich die Timestamp-Spalte in nur Millisekunden von PostgreSQL erhalten?
Antwort an Jack:
Ich erhalte den gleichen Unterschied wie Sie (-3600), aber wenn ich verwende, timestamp with time zone
kann ich sehen, dass der "Fehler" oder Unterschied darin besteht, dass "1970-01-01" die Zeitzone erhält +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)
Ist der Unterschied ein Fehler? Ich kann im Moment wegen "Sommerzeit" sein?
Interessant auch beim to_timestamp()
Einfügen der Zeitstempel 0 und 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
quelle