postgresql 如何从UUID v7中提取时间戳?

tv6aics1  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(142)

UUID v7定义为:
前48位是自Unix纪元以来的大端无符号毫秒数,接下来的4位是版本位(0111),后面是12位伪随机数据。
如何从UUID v7字符串中提取时间戳?

twh00eeo

twh00eeo1#

这是可行的:

SELECT to_timestamp(x'0187296000797352b8a70b7088b46d0f'::bit(48)::bigint / 1000);

2023-03-28 17:50:52
这可以抽象为:

CREATE OR REPLACE FUNCTION extract_timestamp_from_uuid_v7(uuid_v7 UUID)
RETURNS TIMESTAMP AS $$
  SELECT to_timestamp(('x'||replace(uuid_v7::text, '-', ''))::bit(48)::bigint / 1000) AS result;
$$ LANGUAGE sql IMMUTABLE;

相关问题