sql >> Database teknologi >  >> RDS >> PostgreSQL

Cast eller udtræk tidsstempel fra v1 UUID i PostgreSQL

Jeg har testet dette med uuid'er fra min database, og det ser ud til at fungere meget godt, selv uden de usignerede bigints

CREATE FUNCTION uuid_timestamp(id uuid) RETURNS timestamptz AS $$
  select TIMESTAMP WITH TIME ZONE 'epoch' +
      (((('x' || lpad(split_part(id::text, '-', 1), 16, '0'))::bit(64)::bigint) +
      (('x' || lpad(split_part(id::text, '-', 2), 16, '0'))::bit(64)::bigint << 32) +
      ((('x' || lpad(split_part(id::text, '-', 3), 16, '0'))::bit(64)::bigint&4095) << 48) - 122192928000000000) / 10000000 ) * INTERVAL '1 second';    
$$ LANGUAGE SQL
  IMMUTABLE
  RETURNS NULL ON NULL INPUT;

en V1 uuid, jeg oprettede i fremtiden i 2099!

select uuid_timestamp('6d248400-65b7-1243-a57a-14109fec739e');
uuid_timestamp     
------------------------
 2099-08-01 11:30:00-07
(1 row)


  1. Forespørgsel for at kontrollere postgresql-databasestatus

  2. Sådan opretter du forbindelse til MySQL fra kommandolinjen

  3. Nummerdatatype, der vises som # i SQL Plus

  4. PHP, MySQL, PDO - Få resultat fra UPDATE-forespørgsel?