sql >> Databasteknik >  >> RDS >> SQLite

Hur man genererar ett slumptal inom ett specificerat intervall i SQLite

I SQLite kan du använda random() funktion för att generera ett pseudoslumptal.

Det här är bra, men värdet som returneras är mellan -9223372036854775808 och +9223372036854775807.

Vad händer om du behöver ett slumptal mellan 0 och 10? Eller säg 1 och 100?

Lyckligtvis kan du göra detta genom att kombinera random() med abs() och modulo-operatorn.

Slumptal mellan 0 och 10

Du kan använda följande kod för att generera ett pseudoslumptal mellan 0 och 10.

SELECT abs(random() % 10);

Här är ett exempel på att välja flera slumpmässiga värden.

SELECT 
  abs(random() % 10) AS R1,
  abs(random() % 10) AS R2,
  abs(random() % 10) AS R3;

Resultat:

R1          R2          R3        
----------  ----------  ----------
2           8           5         

Öka räckvidden

Naturligtvis kan du ändra värdet till vad du vill (förutsatt att det är inom random() intervall av möjliga värden).

Här är det igen med intervallet ökat till mellan 0 och 100.

SELECT 
  abs(random() % 100) AS R1,
  abs(random() % 100) AS R2,
  abs(random() % 100) AS R3;

Resultat:

R1          R2          R3        
----------  ----------  ----------
76          60          85        

Slumptal mellan 1 och 10

Om du inte vill att noll ska vara en del av de möjliga resultaten kan du använda följande metod.

Följande kod genererar ett pseudoslumptal mellan 1 och 10.

SELECT abs(random()) % (10 - 1) + 1;

Här är ett exempel på att välja flera slumpmässiga värden.

SELECT 
  abs(random()) % (10 - 1) + 1 AS R1,
  abs(random()) % (10 - 1) + 1 AS R2,
  abs(random()) % (10 - 1) + 1 AS R3;

Resultat:

R1          R2          R3        
----------  ----------  ----------
2           1           8         

  1. pyodbc - mycket långsam bulkinserthastighet

  2. Bootstrappa SQL Express från WiX?

  3. Hur man skapar en procedur i ett paket i Oracle

  4. Hur kan flera rader sammanfogas till en i Oracle utan att skapa en lagrad procedur?