Ist es in Microsoft SQL Server möglich, einen zufälligen int-Wert von Min bis Max zu generieren (Beispiel 3-9, 15-99 usw.)
Ich weiß, ich kann von 0 bis Max generieren, aber wie kann ich die Min-Grenze erhöhen?
Diese Abfrage generiert einen zufälligen Wert von 1 bis 6. Sie muss von 3 auf 6 geändert werden.
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
5 Sek. Später hinzugefügt :
Dumme Frage, sorry ...
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
sql
sql-server
sql-server-2008
FSou1
quelle
quelle
Antworten:
Dies erzeugt eine Zufallszahl zwischen 0-9
1 bis 6
3 bis 6
Dynamisch (basierend auf Eilert Hjelmeseths Kommentar)
Basierend auf Kommentaren aktualisiert:
NEWID
generiert eine zufällige Zeichenfolge (für jede Zeile im Gegenzug)CHECKSUM
Nimmt den Wert der Zeichenfolge und erstellt eine Zahl%
) dividiert durch diese Zahl und gibt den Rest zurück (was bedeutet, dass der maximale Wert eins weniger ist als die von Ihnen verwendete Zahl).ABS
ändert negative Ergebnisse in positivequelle
ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
. Einige Tests meinerseits ergaben gute Ergebnisse. Wenn es tatsächlich richtig ist, könnte diese Antwort meiner Meinung nach leicht verbessert werden, indem sie aufgenommen wird.Ich sehe, dass Sie eine Antwort auf Ihre Frage in SQL Server 2008 hinzugefügt haben, die Sie auch tun können
Einige Nachteile dieser Methode sind
NEWID()
Methodeaber ich dachte nur, ich würde es als eine weitere Option hinzufügen.
quelle
CRYPT_GEN_RANDOM
ist wirklich für Situationen gedacht, in denen Sie eine kryptografisch sicherere Pseudozufallszahl benötigen.Du kannst das:
Und das wurde direkt von diesem Link übernommen . Ich weiß nicht wirklich, wie ich diese Antwort richtig würdigen soll.
quelle
Schön und einfach, von Pinal Daves Seite:
http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/
(Ich habe eine geringfügige Änderung am @ Upper- vorgenommen, um die obere Zahl aufzunehmen, hinzugefügt 1.)
quelle
Einfach:
Sie können diesen Code nach Ihren Wünschen ändern und bearbeiten.
quelle
Hier ist die einfache und einzelne Codezeile
Verwenden Sie dazu die SQL Inbuild RAND () -Funktion.
Hier ist die Formel zum Generieren einer Zufallszahl zwischen zwei Zahlen (RETURN INT Range)
Hier ist a Ihre erste Zahl (Min) und b die zweite Zahl (Max) im Bereich
Hinweis: Sie können auch die CAST- oder CONVERT-Funktion verwenden, um die INT-Bereichsnummer abzurufen.
(CAST (RAND () * (25-10) +10 AS INT))
Beispiel:
Hier ist die Formel zum Generieren einer Zufallszahl zwischen zwei Zahlen (RETURN DECIMAL Range)
Beispiel:
Weitere Details finden Sie hier: https://www.techonthenet.com/sql_server/functions/rand.php
quelle
quelle
SELECT ROUND((6 - 3 * 0.16), 0) SELECT ROUND((6 - 3 * 0.17), 0) SELECT ROUND((6 - 3 * 0.5), 0) SELECT ROUND((6 - 3 * 0.51), 0) SELECT ROUND((6 - 3 * 0.83), 0) SELECT ROUND((6 - 3 * 0.84), 0)
Zeigt, dass 16% Änderung für 6, ~ 34% es ist 5, ~ 34% es ist 4 und ~ 16% es ist 3.Lamaks Antwort als Funktion:
quelle
Schritt für Schritt
Beachten Sie, dass eine benutzerdefinierte Funktion die Verwendung von RAND () nicht zulässt. Eine Problemumgehung hierfür (Quelle: http://blog.sqlauthority.com/2012/11/20/sql-server-using-rand-in-user-defined-functions-udf/ ) besteht darin, zuerst eine Ansicht zu erstellen.
und erstellen Sie dann die Zufallsfunktion
quelle
Allgemein:
Für Ihre Frage:
<=>
quelle