首页 > 数据库 > 数据库开发技术 > SQL实现UUIDv7
select
-- timestamp
lpad(to_hex(((extract(epoch from now()) * 1000)::bigint >> 16)), 8, '0') || '-' ||
lpad(to_hex(((extract(epoch from now()) * 1000
+ (date_part('milliseconds', now())::bigint % 1000))::bigint & 0xffff)), 4, '0') || '-' ||
-- version
lpad(to_hex((0x7000 + (random() * 0x0fff)::int)), 4, '0') || '-' ||
-- variant
lpad(to_hex((0x8000 + (random() * 0x3fff)::int)), 4, '0') || '-' ||
-- randomness
lpad(to_hex((floor(random() * (2^48))::bigint >> 16)), 12, '0') AS uuid7;
uuid7 |
------------------------------------+
01904fcb-0ee8-7d9c-a192-000052989c99|
select
-- timestamp
format('%08x', ((strftime('%s') * 1000) >> 16)) || '-' ||
format('%04x', ((strftime('%s') * 1000)
+ ((strftime('%f') * 1000) % 1000)) & 0xffff) || '-' ||
-- version
format('%04x', 0x7000 + abs(random()) % 0x0fff) || '-' ||
-- variant
format('%04x', 0x8000 + abs(random()) % 0x3fff) || '-' ||
-- randomness
format('%012x', abs(random()) >> 16) as value;
value |
------------------------------------+
01904fd0-3dae-7460-8d4c-7d0c6b483299|
原文作者:SQL编程思想;如有侵权,请联系管理员删除。