1

我们想要一个函数,给定一个三字节类型的参数bytea(由扩展的函数生成gen_random_bytespgcrypto,该函数返回一个随机的 6 位整数(介于 0 和 999999 之间)。6 位整数应保留传递给函数的参数给出的随机性。

4

2 回答 2

1

我可能过于复杂,但我需要确保字符串中恰好有 n 个数字。允许重复数字。

SELECT string_agg(shuffle('0123456789')::char, '')
FROM generate_series(1, 6);

为方便起见,我在此处复制的另一个答案中提供了随机播放功能

create or replace function shuffle(text)
returns text language sql as $$
    select string_agg(ch, '')
    from (
        select substr($1, i, 1) ch
        from generate_series(1, length($1)) i
        order by random()
        ) s
$$;
于 2018-04-30T11:27:38.220 回答
0

如果是 3 个字节,则取 6 个最后一个字符,前置'x',转换为位串,然后转换为 int:

select ('x' || right(gen_random_bytes(3)::text, 6))::bit(24)::int;

更多细节在类似的问题中:在 PostgreSQL 中将字节茶表示为单个整数的最简单方法是什么?

于 2017-06-26T17:49:08.990 回答