Comme mon approche pour une requête de test sur laquelle j'ai travaillé dans cette question n'a pas fonctionné, j'essaye autre chose maintenant. Existe-t-il un moyen de dire à la random()
fonction de pg de ne me donner que des nombres entre 1 et 10?
sql
postgresql
random
KB22
la source
la source
trunc()
renvoie le même type de données que l'entrée (comme indiqué dans le manuel). Vous deveztrunc(random() * 20)::int
random()
renvoie une valeur <1 qui, multipliée par 9, serait> = 9 en raison de la nature inexacte du type à double précision ? En pratique, même si cela est possible, ce serait bien sûr très improbable à cause des 15 chiffres environ.width_bucket(random(), 0, 1, 10)
comme alternativePour résumer et simplifier un peu, vous pouvez utiliser:
Et vous pouvez tester ceci comme mentionné par @ user80168
la source
ceil(random() * 10)
résulter en 0 - je m'en tiendraifloor
.SELECT floor(random() * 10 + 1);
Si vous utilisez SQL Server, la méthode correcte pour obtenir un entier est
Où
la source
(tronc (aléatoire () * 10)% 10) + 1
la source
La version correcte de la réponse de hythlodayr.
La sortie de
trunc
doit être convertie enINTEGER
. Mais cela peut se faire sanstrunc
. Cela s'avère donc simple.Génère une sortie INTEGER dans la plage [1, 10], c'est-à-dire à la fois 1 et 10 inclus.
Pour tout nombre (flottants), voir la réponse de user80168. c'est-à-dire ne pas le convertir en
INTEGER
.la source
En fait, je ne sais pas que vous le voulez.
essaye ça
la source
Cette procédure stockée insère un nombre rand dans une table. Attention, il insère un nombre infini. Arrêtez de l'exécuter lorsque vous obtenez suffisamment de nombres.
créer une table pour le curseur:
ALLER
Créez un tableau pour contenir vos nombres:
INSÉRER LE SCRIPT:
CRÉATION ET EXÉCUTION DE LA PROCÉDURE:
Remplissez votre table:
la source