我想在Sqlite中生成大小爲N的隨機數集。在sqlite中生成多個隨機數
現在我已經得到了最好是工會組調用到random()
這樣
create view random_view as
select random()
union select random()
union select random()
union select random()
union select random()
;
也許有人有一個更聰明的解決方案,能夠產生N個數字?
我想在Sqlite中生成大小爲N的隨機數集。在sqlite中生成多個隨機數
現在我已經得到了最好是工會組調用到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.
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>
哈!那真是太聰明瞭 – Petriborg 2011-05-12 02:21:21
如果需要數百萬行的和有殼/ 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
是的,如果你可以運行外部命令,那麼從/ dev/random,perl,python或任何地方獲得一個隨機數很容易。我試圖純粹在SQLite中完成它。不過謝謝。 – Petriborg 2012-10-01 17:35:25
您可以使用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;
不錯!只要'anytable'有N行就可以工作。 – Petriborg 2011-05-12 01:36:19