Da mein Ansatz für eine Testabfrage, an der ich in dieser Frage gearbeitet habe, nicht funktioniert hat, versuche ich jetzt etwas anderes. Gibt es eine Möglichkeit, der random()
Funktion von pg mitzuteilen , dass ich nur Zahlen zwischen 1 und 10 bekomme?
sql
postgresql
random
KB22
quelle
quelle
trunc()
Gibt den gleichen Datentyp wie die Eingabe zurück (wie im Handbuch angegeben). Sie müssen das Ergebnis in eine Ganzzahltrunc(random() * 20)::int
random()
einen Wert <1 zurückzugeben, der bei Multiplikation mit 9 aufgrund der Ungenauigkeit des Typs mit doppelter Genauigkeit > = 9 wäre . Selbst wenn es in der Praxis möglich ist, wäre dies aufgrund der etwa 15-stelligen Genauigkeit natürlich unwahrscheinlich.width_bucket(random(), 0, 1, 10)
als Alternative mitUm es zusammenzufassen und ein wenig zu vereinfachen, können Sie Folgendes verwenden:
Und Sie können dies wie von @ user80168 erwähnt testen
quelle
ceil(random() * 10)
0 zu ergeben - ich würde mich daran haltenfloor
.SELECT floor(random() * 10 + 1);
Wenn Sie SQL Server verwenden, ist der richtige Weg, um eine Ganzzahl zu erhalten,
Wo
quelle
(abgeschnitten (zufällig () * 10)% 10) + 1
quelle
Die richtige Version von Hythlodayrs Antwort.
Die Ausgabe von
trunc
muss in konvertiert werdenINTEGER
. Aber es kann ohne gemacht werdentrunc
. Es stellt sich also als einfach heraus.Erzeugt einen INTEGER-Ausgang im Bereich [1, 10], dh sowohl 1 als auch 10.
Informationen zu beliebigen Zahlen (Floats) finden Sie in der Antwort von user80168. dh konvertiere es einfach nicht in
INTEGER
.quelle
Eigentlich weiß ich nicht, dass du das willst.
Versuche dies
quelle
Diese gespeicherte Prozedur fügt eine Rand-Nummer in eine Tabelle ein. Pass auf, es fügt endlose Zahlen ein. Stoppen Sie die Ausführung, wenn Sie genügend Zahlen erhalten.
Erstellen Sie eine Tabelle für den Cursor:
GEHEN
Erstellen Sie eine Tabelle mit Ihren Zahlen:
EINFÜGEN DES SCRIPT:
ERSTELLEN UND AUSFÜHREN DES VERFAHRENS:
Füllen Sie Ihren Tisch:
quelle