sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo extraer la marca de tiempo de mongodb objectid en postgres

En documentación de Mongodb el Objectid se forma con una marca de tiempo como los primeros 4 bytes, pero esto se representa en hexadecimal. Suponiendo que el valor hexadecimal se almacena como una cadena en PostgreSQL, la siguiente consulta extraerá solo los primeros 8 caracteres de ese ID de objeto, lo convertirá en un número entero (que son segundos desde 1970-01-01) y luego convertirá ese número entero en una marca de tiempo . Por ejemplo:

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
;

La conversión de una cadena hexadecimal a entero se analiza aquí:Convertir hexadecimal en representación de texto a número decimal