Ich hatte heute das Problem, dass ich für ein Demo Projekt tausende Zahlen brauchte um meine Datenbank zu befüllen. Sicherlich kann man das auch mit PHP & Co. machen, aber es geht tatsächlich auch direkt in SQL.
Ich hatte drei Anwendungsfälle:
- Ich brauche ganze Zahlen (integer)
- Ich brauche Geldbeträge (float)
- Ich möchte einen Bereich (min, max) angeben können, um die Demo Daten glaubhafter zu machen.
Der SQL Befehl sieht wie folgt aus:
SELECT FLOOR( RAND() * (maximum - minimum) + minimum) as randomValue;
Mit RAND()
kann man eine Zahl zw. 0 und 1 generieren und mit etwas Math-Magic kann man dann auch noch einen Bereich festlegen. Und mittels FLOOR()
wird draus eine natürliche Zahl.
Beispiel für eine Zahl zw. 20 und 100:
SELECT FLOOR( RAND() * (100 - 20) + 20) as randomValue;
+-------------+
| randomValue |
+-------------+
| 50 |
+-------------+
1 row in set (0.00 sec)
Beispiel für einen Geldbetrag zwischen 0,50 und 100,00: (wir generieren einen Cent Betrag und rechnen anschließend durch 100)
SELECT FLOOR( RAND() * (10000 - 50) + 50) / 100 as randomValue;
+-------------+
| randomValue |
+-------------+
| 45,65 |
+-------------+
1 row in set (0.00 sec)
Das Speichern ist dann nun ein leichtes. Ich hab so z.B. ein UPDATE durchgeführt, weil die Spalten mit leeren Werten schon existierten:
UPDATE facts
SET value = FLOOR( RAND() * (10000 - 50) + 50)
WHERE id IN (1,2,3,4)