Я хотел бы сгенерировать набор случайных чисел размера N в Sqlite.
Сейчас лучшее, что у меня есть, - объединить набор вызовов в random(), например,
random()
Может быть, у кого-то есть более умное решение, которое может генерировать 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>
Не пробовал, но может это? Для любой таблицы, содержащей не менее N строк,
SELECT RANDOM() FROM anytable LIMIT ?
с заменой ? на N.
?
Вы можете использовать рекурсивный запрос .
Этот запрос генерирует таблицу с 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;
Если вам нужны миллионы строк и у вас есть shell / bash, этого может быть достаточно:
echo -e '.import "/dev/stdin" mytable\n'; sleep 0.5 ; for i in {1..10000000}; do echo $RANDOM; done) | sqlite3 my.db
Шаг ожидания важен для предотвращения чтения первых чисел в виде SQL-команд sqlite из-за буферизации. YMMV