我们想要一个函数,给定一个三字节类型的参数bytea
(由扩展的函数生成gen_random_bytes
)pgcrypto
,该函数返回一个随机的 6 位整数(介于 0 和 999999 之间)。6 位整数应保留传递给函数的参数给出的随机性。
问问题
1418 次
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 回答