У меня есть столбец «создан» с типом timestamp without time zone default now()
в базе данных PostgreSQL.
Если я выберу столбцы, по умолчанию у них будет хороший и читаемый формат:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Но я бы хотел получить отметку времени всего за миллисекунды (как Long). Что-то вроде этого:
ВЫБЕРИТЕ myformat (создано) ИЗ mytable;
created
-----------------
2432432343876944
Как получить столбец отметки времени в PostgreSQL всего за миллисекунды?
Ответ Джеку:
Я получаю ту же разницу, что и вы (-3600), но если я использую, timestamp with time zone
я вижу, что «ошибка» или разница в том, что «1970-01-01» получает часовой пояс +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)
Является ли разница ошибкой? Может быть, из-за "летнего времени" на данный момент?
Также интересно использовать to_timestamp()
при вставке отметки времени 0 и 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