Est-il possible dans Microsoft SQL Server de générer une valeur int aléatoire de Min à Max (exemple 3-9, 15-99, etc.)
Je sais, je peux générer de 0 à Max, mais comment augmenter la frontière Min?
Cette requête génère une valeur aléatoire de 1 à 6. Vous devez la changer de 3 à 6.
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Ajouté 5 sec plus tard :
Question stupide, désolé ...
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Réponses:
Cela génère un nombre aléatoire entre 0 et 9
1 à 6
3 à 6
Dynamique (basé sur le commentaire d'Eilert Hjelmeseths)
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%
) 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 positifsla source
ABS(CHECKSUM(NEWID()) % (@max - @min + 1)) + @min
. Quelques tests de ma part ont donné de bons résultats. Si c'est effectivement exact, je pense que cette réponse pourrait être légèrement améliorée en l'incluant.Je vois que vous avez ajouté une réponse à votre question dans SQL Server 2008 que vous pouvez également faire
Quelques inconvénients de cette méthode sont
NEWID()
méthodemais je pensais juste l'ajouter comme une autre option.
la source
CRYPT_GEN_RANDOM
c'est vraiment destiné aux situations où vous avez besoin d'un nombre pseudo aléatoire plus sécurisé cryptographiquement.Tu peux le faire:
Et cela a été pris directement à partir de ce lien , je ne sais pas vraiment comment donner le crédit approprié pour cette réponse.
la source
Sympa et simple, du site de Pinal Dave:
http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/
(J'ai fait une légère modification au @ Upper- pour inclure le nombre supérieur, ajouté 1.)
la source
Simplement:
Vous pouvez changer et éditer ce code selon vos besoins.
la source
Voici la simple et unique ligne de code
Pour cela, utilisez la fonction SQL Inbuild RAND () .
Voici la formule pour générer un nombre aléatoire entre deux nombres (RETURN INT Range)
Ici, a est votre premier nombre (min) et b est le deuxième nombre (max) de la plage
Remarque: vous pouvez également utiliser la fonction CAST ou CONVERT pour obtenir le numéro de plage INT.
(CAST (RAND () * (25-10) +10 AS INT))
Exemple:
Voici la formule pour générer un nombre aléatoire entre deux nombres (RETURN DECIMAL Range)
Exemple:
Plus de détails, vérifiez ceci: https://www.techonthenet.com/sql_server/functions/rand.php
la source
la source
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)
Montre que 16% de changement pour 6, ~ 34% c'est 5, ~ 34% c'est 4 et ~ 16% c'est 3.Réponse de Lamak en fonction:
la source
Pas à pas
Notez qu'une fonction définie par l'utilisateur ne permet donc pas l'utilisation de RAND (). Une solution de contournement pour cela (source: http://blog.sqlauthority.com/2012/11/20/sql-server-using-rand-in-user-defined-functions-udf/ ) consiste à créer d'abord une vue.
puis créez la fonction aléatoire
la source
En général:
Pour votre question:
<=>
la source