2017-08-31 28 views
1

在MongoDB中,您可以使用getTimestamp()函數從ObjectId中檢索日期。我如何使用Postgresql從MongoDB ObjectId中檢索日期(例如,在這種ObjectId存儲在Postgres數據庫中的情況下)?如何從postgres中的mongodb objectid中提取時間戳

示例輸入:

507c7f79bcf86cd7994f6c0e 求購輸出:

2012-10-15T21:26:17Z

回答

1

Mongodb documentation所述的ObjectID與時間戳作爲前4個字節形成,但這以十六進制表示。假設十六進制值在PostgreSQL中作爲字符串存儲,那麼以下查詢將只提取該目標的前8個字符,將其轉換爲整數(從1970-01-01開始秒),然後將該整數轉換爲時間戳。例如:

SELECT TO_TIMESTAMP(int_val) ts_val 
FROM (
    SELECT ('x' || lpad(left(objectid,8), 8, '0'))::bit(32)::int AS int_val 
    FROM (
     VALUES ('507c7f79bcf86cd7994f6c0e') 
     ) AS t1(objectid) 
    ) AS t2 
; 

轉換十六進制字符串到整數此處討論: Convert hex in text representation to decimal number