PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Прехвърляне или извличане на клеймо за време от v1 UUID в PostgreSQL

Тествах това с uuid от моята база данни и изглежда, че работи много добре, дори без неподписаните 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;

V1 uuid, който създадох през 2099 г.!

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psql:не можа да се свърже със сървъра:Връзката е отказана Грешка при свързване към отдалечена база данни

  2. Вземете датата на създаване на база данни в PostgreSQL

  3. Вмъкнете речника на Python с помощта на Psycopg2

  4. Възможно ли е да се хване нарушение на външен ключ в postgre

  5. Вижте грешка в PostgreSQL