Saya memiliki kolom "dibuat" dengan mengetikkan timestamp without time zone default now()
dalam database PostgreSQL.
Jika saya memilih kolom, formatnya bagus dan mudah dibaca per default:
SELECT created FROM mytable;
created
---------------------------
2011-05-17 10:40:28.876944
Tapi saya ingin mendapatkan cap waktu hanya dalam milidetik (sebagai Long). Sesuatu seperti ini:
PILIH myformat (dibuat) DARI mytable;
created
-----------------
2432432343876944
Bagaimana saya bisa mendapatkan kolom cap waktu hanya dalam milidetik dari PostgreSQL?
Respon untuk Jack:
Saya mendapatkan perbedaan yang sama dengan Anda (-3600), tetapi jika saya menggunakan timestamp with time zone
saya dapat melihat bahwa "kesalahan" atau perbedaan adalah karena '1970-01-01' mendapatkan zona waktu +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)
Apakah bedanya bug? Saya mungkin karena "waktu musim panas" saat ini?
Juga menarik saat menggunakan to_timestamp()
untuk memasukkan stempel waktu 0 dan 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
sumber