sql >> Database >  >> RDS >> PostgreSQL

Cast of extraheer een tijdstempel van v1 UUID in PostgreSQL

Ik heb dit getest met uuid's uit mijn database en het lijkt heel goed te werken, zelfs zonder de niet-ondertekende 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;

een V1 uuid die ik in de toekomst van 2099 heb gemaakt!

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


  1. Wat is er mis met Cursors?

  2. kan geen verbinding maken met AWS RDS postgres-instantie vanuit pgadmin4

  3. Krijgen alle punch in en uit voor elke werknemer?

  4. Dubbele invoer voor primaire sleutel op MySQL