sql >> Databasteknik >  >> RDS >> Sqlserver

Generera slumpmässiga int-värden från 3 till 6

En hjälpsam redaktör lade till "Select" före varje påstående, men poängen med detta objekt är att det kan generera unika nycklar för varje rad i en retur, inte bara ett objekt (för det skulle jag använda Rand()-funktionen). :Välj topp 100 Rand(),* från tblExample

Skulle returnera samma slumpmässiga värde för alla 100 rader.

While:Välj topp 100 ABS(CHECKSUM(NEWID()) % 10),* från tbleexample

Skulle returnera ett annat slumpmässigt värde mellan 0 och 9 på varje rad i returen. Så även om select gör det lättare att kopiera och klistra in, kan du kopiera logiken till en select-sats om det är vad som krävs.

Detta genererar ett slumptal mellan 0-9

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

1 till 6

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

3 till 6

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

Dynamisk (Baserat på Eilert Hjelmeseths kommentar, uppdaterad för att fixa bugg( + till -))

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

Uppdaterad baserat på kommentarer:

  • NEWID genererar slumpmässig sträng (för varje rad i retur)
  • CHECKSUM tar värdet av strängen och skapar nummer
  • modul (% ) dividerar med det numret och returnerar resten (vilket betyder att maxvärdet är en mindre än talet du använder)
  • ABS ändrar negativa resultat till positiva
  • lägg sedan till ett till resultatet för att eliminera 0 resultat (för att simulera ett tärningskast)


  1. Subtrahera dagar från ett datum i SQLite

  2. SQL Server:DELETE vs TRUNCATE

  3. sträng bokstavlig för lång - hur man tilldelar långa xml-data till clob-datatyp i oracle 11g r2

  4. Hur man kontrollerar vilka lås som hålls på ett bord