91 votes

Générer un nombre aléatoire dans la plage 1 - 10

Puisque mon approche pour une requête de test sur laquelle j'ai travaillé en cette question n'a pas fonctionné, j'essaie autre chose maintenant. Y a-t-il un moyen de dire à pg's random() pour me donner uniquement les nombres entre 1 et 10 ?

144voto

Si par "nombres entre 1 et 10", vous entendez tout nombre flottant >= 1 et < 10, alors c'est facile :

select random() * 9 + 1

Ceci peut être facilement testé avec :

# select min(i), max(i) from (
    select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
       min       |       max
-----------------+------------------
 1.0000083274208 | 9.99999571684748
(1 row)

Si vous voulez des entiers qui sont >= 1 et < 10, c'est simple :

select trunc(random() * 9 + 1)

Et encore une fois, un test simple :

# select min(i), max(i) from (
    select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
 min | max
-----+-----
   1 |   9
(1 row)

4voto

hythlodayr Points 2015

(trunc(random() * 10) % 10) + 1

0voto

user2786206 Points 1

En fait, je ne sais pas si tu veux faire ça.

essayez ceci

INSERT INTO my_table (my_column)
SELECT
    (random() * 10) + 1
;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X