在sqlite中生成多个随机数

在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

我想在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 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中完成它。谢谢你。