Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Generieren Sie einen zufälligen int-Wert von 3 bis 6

Ein hilfreicher Editor fügte das 'Select' vor jeder Anweisung hinzu, aber der Punkt dieses Elements ist, dass es eindeutige Schlüssel für jede Zeile in einer Rückgabe generieren kann, nicht nur ein Element (dafür würde ich die Funktion Rand() verwenden). Zum Beispiel :Top 100 Rand(),* aus tblExample auswählen

Würde denselben zufälligen Wert für alle 100 Zeilen zurückgeben.

While:Top 100 ABS(CHECKSUM(NEWID()) % 10),* aus tblexample

auswählen

Würde einen anderen zufälligen Wert zwischen 0 und 9 in jeder Zeile in der Rückgabe zurückgeben. Während die Auswahl das Kopieren und Einfügen erleichtert, können Sie die Logik in eine Auswahlanweisung kopieren, wenn dies erforderlich ist.

Dies erzeugt eine Zufallszahl zwischen 0-9

SELECT ABS(CHECKSUM(NEWID()) % 10)

1 bis 6

SELECT ABS(CHECKSUM(NEWID()) % 6) + 1

3 bis 6

SELECT ABS(CHECKSUM(NEWID()) % 4) + 3

Dynamisch (Basierend auf Eilert Hjelmeseths Kommentar, aktualisiert, um Fehler zu beheben (+ zu -))

SELECT ABS(CHECKSUM(NEWID()) % (@max - @min - 1)) + @min

Basierend auf Kommentaren aktualisiert:

  • NEWID erzeugt eine zufällige Zeichenfolge (für jede Zeile im Gegenzug)
  • CHECKSUM Nimmt den Wert der Zeichenkette und erzeugt eine Zahl
  • Modul (% ) dividiert durch diese Zahl und gibt den Rest zurück (was bedeutet, dass der maximale Wert um eins kleiner ist als die von Ihnen verwendete Zahl)
  • ABS ändert negative Ergebnisse in positive
  • addieren Sie dann eins zum Ergebnis, um 0 Ergebnisse zu eliminieren (um einen Würfelwurf zu simulieren)