PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Keluarkan atau ekstrak stempel waktu dari v1 UUID di PostgreSQL

Saya telah menguji ini dengan uuid dari database saya dan tampaknya bekerja dengan sangat baik, bahkan tanpa bigint yang tidak ditandatangani

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;

sebuah uuid V1 yang saya buat di tahun 2099 mendatang!

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. Pencarian/kueri yang tidak peka huruf besar/kecil

  2. isi kolom dengan nilai terakhir dari partisi di postgresql

  3. Hasilkan nomor acak dalam kisaran 1 - 10

  4. Bagaimana cara menambahkan jumlah jam variabel ke tanggal di PostgreSQL?

  5. Minta detail skema tabel di PostgreSQL?