sql >> Database >  >> RDS >> SQLite

Hoe SQLite Random() werkt

De SQLite random() functie retourneert een pseudo-willekeurig geheel getal tussen -9223372036854775808 en +9223372036854775807.

Een pseudo-willekeurig getal is een getal dat willekeurig lijkt, maar niet echt willekeurig is. Een pseudo-willekeurig getal is niet echt willekeurig omdat de waarde is gegenereerd door een bekende seed. Een pseudo-willekeurig getal lijkt echter willekeurig te zijn als de gebruiker geen kennis heeft van de seed of het algoritme dat het heeft gemaakt.

Daarom worden pseudo-willekeurige getallen voor veel toepassingen vaak als goed genoeg beschouwd.

Voorbeeld

Hier is een voorbeeld van het genereren van een pseudo-willekeurig getal met de random() functie.

SELECT random();

Resultaat:

-882536775989953141

Alleen positieve waarden

Je kunt random() . combineren met abs() om alleen positieve waarden te genereren.

SELECT abs(random());

In dit geval, als random() genereert een negatieve waarde, abs() zal in plaats daarvan de absolute waarde retourneren.

Om te demonstreren hoe abs() werkt, is dit wat er gebeurt als ik het (negatieve) willekeurige getal van het eerste voorbeeld doorgeef aan de abs() functie:

SELECT abs(-882536775989953141);

Resultaat:

882536775989953141

Dus als we random() . doorgeven naar abs() , en random() genereert een negatieve waarde, abs() zal die waarde teruggeven als een positieve waarde.

Waarde tussen 0 en 100

Hier is een voorbeeld van het genereren van een positief getal tussen 0 en 100.

SELECT abs(random() % 100);

Hier is een voorbeeld van het selecteren van meerdere willekeurige waarden.

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

Resultaat:

R1          R2          R3        
----------  ----------  ----------
17          79          90        

Retourneer willekeurige rijen

U kunt random() . gebruiken in een ORDER BY clausule van een databasequery om willekeurige rijen te retourneren.

Hier is een voorbeeld.

SELECT * FROM Artist 
ORDER BY random() LIMIT 5;

Resultaat:

ArtistId    Name                                    
----------  ----------------------------------------
131         Smashing Pumpkins                       
127         Red Hot Chili Peppers                   
169         Black Eyed Peas                         
60          Santana Feat. Dave Matthews             
240         Gustav Mahler                           

En dit is wat ik krijg als ik het opnieuw doe:

ArtistId    Name                                    
----------  ----------------------------------------
234         Orchestra of The Age of Enlightenment   
126         Raul Seixas                             
76          Creedence Clearwater Revival            
182         Nega Gizza                              
63          Santana Feat. Lauryn Hill & Cee-Lo      

Als je een grote tabel hebt, wil je misschien je zoekopdracht wijzigen in iets als dit:

SELECT * FROM Artist 
WHERE ArtistId IN 
  (SELECT ArtistId FROM Artist ORDER BY random() LIMIT 5);

Resultaat:

ArtistId    Name                                    
----------  ----------------------------------------
45          Sandra De Sá                            
105         Men At Work                             
110         Nirvana                                 
205         Chris Cornell                           
267         Göteborgs Symfoniker & Neeme Järvi     

  1. Oplossing:"SQLServerAgent is momenteel niet actief ..."

  2. Schemadefinities door DBMS

  3. conversie van een varchar-gegevenstype naar een datetime-gegevenstype resulteerde in een waarde buiten het bereik

  4. MySql-somelementen van een kolom