SpatiaLite è il modulo spaziale di SQLite e quindi supporta tutti le funzioni di quest’ultimo. La funzione random utilizzata da SQLite è random() che
restituisce un intero pseudo-casuale compreso tra -9223372036854775808 e +9223372036854775807 cioè tra una minimo e massimo.
Per ottenere un numero compreso tra -1 e 1, occorre dividere il valore restituito per il massimo= 9223372036854775808 e se volessimo un numero compreso tra 0 e 1 occorre dividere per (2*massimo) e sommare 0,5 cioè:
(0.5 - RANDOM() / CAST(-9223372036854775808 AS REAL) / 2)
ottenuto il range (0 1) per generare un intervallo di valori compreso tra un max e un min occorre usare la seguente espressione:
(0.5 - RANDOM()/CAST(-9223372036854775808 AS REAL)/2) * (max - min) + min
i valori max e min sono quelli del Bounding Box di un poligono generico (x: 13.452028 – 13.243295; y:38.224614 – 38.049991)

Se volessimo generare 1000 random point lo script SQL utilizzato è:
-- creo una tabella vuota che conterrà i random point
CREATE TABLE point_bb
(id INTEGER PRIMARY KEY AUTOINCREMENT,cir_id INTEGER);
-- popolo ID tabella
INSERT INTO point_bb
WITH RECURSIVE
cnt(id) AS ( SELECT 1 UNION ALL SELECT id + 1 FROM cnt LIMIT 1000)
SELECT id,0 FROM cnt;
-- aggiorno tabella con i punti casuali usando bounding box del poligono
SELECT AddGeometryColumn ('point_bb','geom',4326,'POINT','XY');
UPDATE point_bb SET
geom = (SELECT makepoint (
CAST ((select (0.5 - RANDOM()/CAST(-9223372036854775808 AS REAL)/ 2)*(extent_max_x - extent_min_x) + extent_min_x
FROM "vector_layers_statistics" WHERE id=point_bb.id AND table_name = 'poly') AS REAL),
CAST ((select (0.5 - RANDOM()/CAST(-9223372036854775808 AS REAL)/ 2)*(extent_max_y - extent_min_y) + extent_min_y
FROM "vector_layers_statistics" WHERE id=point_bb.id AND table_name = 'poly') AS REAL), 4326) WHERE id=point_bb.id);

Riferimenti:
Ringraziamenti:
- Andrea Borruso by default