Tôi có một cột "được tạo" với loại timestamp without time zone default now()
trong cơ sở dữ liệu PostgreSQL.
Nếu tôi chọn colums, nó có định dạng đẹp và dễ đọc theo mặc định:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Nhưng tôi muốn có được dấu thời gian chỉ trong một phần nghìn giây (dưới dạng Dài). Một cái gì đó như thế này:
CHỌN myformat (đã tạo) TỪ mytable;
created
-----------------
2432432343876944
Làm cách nào tôi có thể lấy cột dấu thời gian chỉ trong một phần nghìn giây từ PostgreSQL?
Trả lời Jack:
Tôi nhận được sự khác biệt giống như bạn (-3600), nhưng nếu tôi sử dụng timestamp with time zone
tôi có thể thấy rằng "lỗi" hoặc sự khác biệt là do '1970-01-01' có múi giờ +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)
Là sự khác biệt một lỗi? Tôi có thể là do "Thời gian tiết kiệm ánh sáng ban ngày" vào lúc này?
Cũng thú vị trong khi sử dụng to_timestamp()
để chèn dấu thời gian 0 và 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