Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Générer une valeur int aléatoire de 3 à 6

Un éditeur utile a ajouté le "Select" avant chaque instruction, mais le point de cet élément est qu'il peut générer des clés uniques pour chaque ligne dans un retour, pas seulement un élément (pour cela, j'utiliserais la fonction Rand()). Par exemple :Sélectionnez les 100 premiers Rand(),* de tblExample

Renverrait la même valeur aléatoire pour les 100 lignes.

Tandis que :Sélectionnez les 100 premiers ABS(CHECKSUM(NEWID()) % 10),* à partir de l'exemple de table

Renverrait une valeur aléatoire différente entre 0 et 9 sur chaque ligne du retour. Ainsi, bien que la sélection facilite le copier-coller, vous pouvez copier la logique dans une instruction de sélection si c'est ce qui est nécessaire.

Cela génère un nombre aléatoire entre 0 et 9

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

1 à 6

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

3 à 6

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

Dynamique (basé sur le commentaire d'Eilert Hjelmeseths, mis à jour pour corriger un bogue (+ à -))

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

Mis à jour en fonction des commentaires :

  • NEWID génère une chaîne aléatoire (pour chaque ligne en retour)
  • CHECKSUM prend la valeur de la chaîne et crée un nombre
  • module (% ) divise par ce nombre et renvoie le reste (ce qui signifie que la valeur maximale est un de moins que le nombre que vous utilisez)
  • ABS change les résultats négatifs en positifs
  • ajoutez ensuite un au résultat pour éliminer 0 résultat (pour simuler un jet de dé)