sql >> Database teknologi >  >> RDS >> Sqlserver

Generer tilfældig int-værdi fra 3 til 6

En hjælpsom redaktør tilføjede 'Vælg' før hver sætning, men pointen med dette element er, at det kan generere unikke nøgler for hver række i en returnering, ikke kun ét element (for det vil jeg bruge Rand()-funktionen). :Vælg top 100 Rand(),* fra tblExample

Ville returnere den samme tilfældige værdi for alle 100 rækker.

Mens:Vælg top 100 ABS(CHECKSUM(NEWID()) % 10),* fra tbleeksempel

Ville returnere en anden tilfældig værdi mellem 0 og 9 på hver række i returneringen. Så selvom select gør det nemmere at kopiere og indsætte, kan du kopiere logikken ind i en select-sætning, hvis det er det, der kræves.

Dette genererer et tilfældigt tal mellem 0-9

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

1 til 6

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

3 til 6

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

Dynamisk (Baseret på Eilert Hjelmeseths kommentar, opdateret for at rette fejl (+ til -))

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

Opdateret baseret på kommentarer:

  • NEWID genererer tilfældig streng (for hver række til gengæld)
  • CHECKSUM tager værdien af ​​streng og opretter tal
  • modul (% ) dividerer med det tal og returnerer resten (det betyder, at maks. værdi er én mindre end det tal, du bruger)
  • ABS ændrer negative resultater til positive
  • tilføj derefter en til resultatet for at eliminere 0 resultater (for at simulere et terningkast)


  1. Hvordan DATE() virker i MariaDB

  2. Oracle JDBC intermitterende forbindelsesproblem

  3. Opret PostgreSQL ROLLE (bruger), hvis den ikke findes

  4. Oprettelse af revisionstriggere i SQL Server