在sqlite中生成多个随机数
我想在Sqlite中生成大小为N的随机数集 现在我能做的最好的事情就是像这样联合一组对在sqlite中生成多个随机数,sqlite,random,Sqlite,Random,我想在Sqlite中生成大小为N的随机数集 现在我能做的最好的事情就是像这样联合一组对random()的调用 create view random_view as select random() union select random() union select random() union select random() union select random() ; 也许有人有一个更聪明的解决方案,可以生成N个数字?没有尝试,但可能是这个?给定任何至少有N行的表 SELECT RANDO
random()
的调用
create view random_view as
select random()
union select random()
union select random()
union select random()
union select random()
;
也许有人有一个更聪明的解决方案,可以生成N个数字?没有尝试,但可能是这个?给定任何至少有N行的表
SELECT RANDOM() FROM anytable LIMIT ?
将
?
替换为N.如果您需要数百万行并拥有shell/bash,这样做可能就足够了:
create temp table rtab (x integer primary key, v default (random()));
create temp trigger rtrig
before insert on rtab
when new.x > 0 begin
insert or replace into rtab (x) values (new.x - 1);
end;
PRAGMA recursive_triggers = on;
insert into rtab (x) values (9);
sqlite> select * from rtab;
0|-6742468521271879323
1|-8020364160821973904
2|4567559116463208288
3|5330277995838989553
4|-9000358059551141276
5|-7148307065140334921
6|8156512560793181351
7|-10751076681323044
8|-7335834651732027766
9|6837665741304560539
sqlite>
echo-e'.import”/dev/stdin“mytable\n';睡眠0.5;对于{1..10000000}中的i;不要重复$RANDOM;完成)| sqlite3 my.db
睡眠步骤对于防止sqlite由于缓冲而将第一个数字作为SQL命令读取至关重要。YMMV您可以使用
此查询生成一个包含1000个随机数的表:
CREATE TABLE test(field1);
INSERT INTO test
WITH RECURSIVE
cte(x) AS (
SELECT random()
UNION ALL
SELECT random()
FROM cte
LIMIT 1000
)
SELECT x FROM cte;
美好的只要
anytable
有N行,就可以工作。是的,如果您可以运行外部命令,那么从/dev/random、perl、python或任何地方获取随机数都非常容易。我试图完全在SQLite中完成它。谢谢你。