У мене стовпець "створений" з типом timestamp without time zone default now()
у базі даних PostgreSQL.
Якщо я вибираю колони, вона має приємний і читабельний формат за замовчуванням:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Але я хотів би отримати часову позначку лише в мілісекундах (як Довга). Щось на зразок цього:
ВИБІРАТИ 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