2017-08-31 64 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