Me gustaría saber si hay alguna manera de seleccionar un número generado aleatoriamente entre 100 y 500 junto con una consulta de selección.
P.ej: SELECT name, address, random_number FROM users
No tengo que almacenar este número en db y solo usarlo para mostrar el propósito.
Probé algo como esto, pero no funciona.
SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users
Espero que alguien me ayude. Gracias
Respuestas:
Esto debería dar lo que quieres:
Genéricamente,
FLOOR(RAND() * (<max> - <min> + 1)) + <min>
genera un número entre<min
> e<max>
inclusivo.Actualizar
Esta declaración completa debería funcionar:
fuente
round()
que dará una distribución no uniforme.SET @r=FLOOR(RAND() * 401) + 100
entoncesSELECT @r
.RAND()
,UUID()
,NOW()
Son funciones indeterministas. Se debe evitar que la llamada a estas funciones se escriba en el registro de bin para su replicación. Por ejemplo.INSERT INTO t SET ID=UUID();
hará que el valor de losID
campos sea diferente en maestro y esclavos. En su lugar, debe escribirse comoSET @uuid:=UUID();
, yINSERT INTO t SET ID=@uuid;
luego ejecutarlos en una sola transacción. Esto será seguro para la replicación. Esto es un poco fuera de tema para esta pregunta. No dice que tu respuesta tenga algún problema. :)Como
RAND
produce un número 0 <= v <1.0 (consulte la documentación ) que debe usarROUND
para asegurarse de poder obtener el límite superior (500 en este caso) y el límite inferior (100 en este caso)Entonces, para producir la gama que necesita:
fuente
Además de esta respuesta, cree una función como
y llama como
SELECT myrandom(100,300);
Esto le da un número aleatorio entre 100 y 300
fuente
Puede crear un número aleatorio usando
FLOOR(RAND() * n) as randnum
(n es un número entero), sin embargo, si no necesita que se repita el mismo número aleatorio, tendrá que almacenarlo en una tabla temporal. Entonces puedes compararlo conwhere randnum not in (select * from temptable)
...fuente
ambos funcionan bien:
fuente
Esta es la fórmula correcta para encontrar números enteros de
i
aj
dondei <= R <= j
fuente
FLOOR(min+RAND()*(max-min+1))