Pet*_*zov 7 sql postgresql postgresql-9.3
我正在使用此SQL查询在PostgreSQL中生成随机值
chr(ascii('B') + (random() * 25)::integer)
Run Code Online (Sandbox Code Playgroud)
如何使用相同的查询生成15个字符随机字符串?
Ben*_*nit 10
这将为您提供一个长度为 15 的随机单词,由源值常量中配置的字母组成
select
string_agg(substr(characters, (random() * length(characters) + 1)::integer, 1), '') as random_word
from (values('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')) as symbols(characters)
-- length of word
join generate_series(1, 15) on 1 = 1
Run Code Online (Sandbox Code Playgroud)
编辑:要获得多个随机词,您可以使用以下内容:
with symbols(characters) as (VALUES ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'))
select string_agg(substr(characters, (random() * length(characters) + 1) :: INTEGER, 1), '')
from symbols
join generate_series(1,8) as word(chr_idx) on 1 = 1 -- word length
join generate_series(1,10000) as words(idx) on 1 = 1 -- # of words
group by idx
Run Code Online (Sandbox Code Playgroud)
另一个很容易阅读的解决方案(性能应该合理,但没有执行基准测试):
select substr(md5(random()::text), 0, 25);
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以将其大写:
select upper(substr(md5(random()::text), 0, 25));
Run Code Online (Sandbox Code Playgroud)
是的,也可以通过单个查询来做到这一点,但如果你希望每个字符都应该根据范围分开,那么上面是解决方案
SELECT array_to_string(ARRAY(
SELECT chr((ascii('B') + round(random() * 25)) :: integer)
FROM generate_series(1,15)),
'');
Run Code Online (Sandbox Code Playgroud)
这是我的贡献
postgres=# SELECT array_to_string(array(select substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',((random()*(36-1)+1)::integer),1) from generate_series(1,50)),'');
array_to_string
----------------------------------------------------
4XOS6TQG5JORLF3D1RPXUWR2FQKON9HIXV0UGH0CQFT1LN5D4L
(1 row)
Run Code Online (Sandbox Code Playgroud)
它允许您指定允许的字符集和字符串的长度.
我用它来生成随机字符串......
如果您不介意破折号并且启用了 uuid 扩展...
select substr(uuid_generate_v4()::text,1,15);
Run Code Online (Sandbox Code Playgroud)
例如,要在名称列中生成随机字符串,我将使用
select concat('name-', substr(uuid_generate_v4()::text,1,10)) as name;
Run Code Online (Sandbox Code Playgroud)
例如name-91fc72dc-d
否则,请使用 @fncomp 的优秀 md5 示例
nb:启用 uuid 扩展
create extension if not exists "uuid-ossp";
Run Code Online (Sandbox Code Playgroud)
这个想法是这样的:
select (chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer) ||
chr(ascii('B') + (random() * 25)::integer)
) as Random15
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6674 次 |
| 最近记录: |