Postgresql
如何在幾毫秒內從 PostgreSQL 獲取時間戳列?
我
timestamp without time zone default now()
在 PostgreSQL 數據庫中有一個類型為“created”的列。如果我選擇列,預設情況下它具有良好且可讀的格式:
SELECT created FROM mytable; created --------------------------- 2011-05-17 10:40:28.876944
但我想在幾毫秒內得到時間戳(作為一個長)。像這樣的東西:
從我的表中選擇我的格式(創建);
created ----------------- 2432432343876944
如何在幾毫秒內從 PostgreSQL 獲取時間戳列?
對傑克的回應:
我確實得到了與您相同的差異(-3600),但是如果我使用,
timestamp with time zone
我可以看到“錯誤”或差異是因為 ‘1970-01-01’ 獲取 time zone+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
使用
EXTRACT
和 UNIX 時間戳SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28.876944') * 1000;
會給
1305621628876.94
將其乘以
1000
將其轉換為毫秒。然後,您可以將其轉換為您想要的任何內容(十進制是一個不錯的選擇)。不要忘記記住時區。JackPDouglas 在他的回答中有這樣一個例子。以下是他回答的摘錄(created
帶有時間戳的列),說明瞭如何使用時區:SELECT EXTRACT(EPOCH FROM created AT TIME ZONE 'UTC') FROM my_table;