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) + 100entoncesSELECT @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 losIDcampos 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
RANDproduce un número 0 <= v <1.0 (consulte la documentación ) que debe usarROUNDpara 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
iajdondei <= R <= jfuente
FLOOR(min+RAND()*(max-min+1))