在sqlite中生成多个随机数

时间:2011-05-12 01:26:32

标签: 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个数字?

4 个答案:

答案 0 :(得分:3)

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> 

答案 1 :(得分:2)

没试过,但也许这个?给定任何至少N行的表,

SELECT RANDOM() FROM anytable LIMIT ?

用N替换?

答案 2 :(得分:0)

如果你需要数百万行并且有shell / bash,那么这可能就足够了:

echo -e '.import "/dev/stdin" mytable\n'; sleep 0.5 ; for i in {1..10000000}; do echo $RANDOM; done) | sqlite3 my.db

睡眠步骤对于防止sqlite因缓冲而将第一个数字作为SQL命令读取至关重要。 YMMV

答案 3 :(得分:0)

您可以使用recursive query

此查询生成一个包含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;