随机字符串函数并不总是返回相同的长度

时间:2019-05-08 01:04:49

标签: sql postgresql

以下功能的目的是返回一个随机字符串,长度为7个字符,其中包含字符a和|或b和|或c:

create or replace function random_short() returns text as $$
    select array_to_string(
        array (
            select substring(
                'abc'
                from (random() * 3)::int for 1
            )

            from generate_series(1, 7)
        ),
        ''
    )
$$ language sql;

问题在于,有时它返回的字符串短于7。我在函数中使用了各种整数的值(例如,将3更改为4),但无法弄清楚。有关如何解决此问题的想法?

1 个答案:

答案 0 :(得分:0)

有时表达式带有随机返回0。您可以改用以下表格:

select string_agg(substring('abc' from greatest((random() * 3)::int, 1) for 1), '')
from generate_series(1, 7)