2010-12-28 76 views

Respuesta

58

usted puede obtener un número entero aleatorio con esta expresión:

Para obtener un número entero aleatorio R en el intervalo i < = R < j, utilice la expresión FLOOR(i + RAND() * (j - i)). Para ejemplo, para obtener un número entero aleatorio en la gama de la gama de 7 < = R < 12, que podría utilizar la siguiente declaración:

SELECT FLOOR(7 + (RAND() * 5)); 

http://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html

uso que para generar un azar cantidad de días, horas o minutos (según la resolución) y agregue ese número a la fecha actual. La expresión completa sería algo como esto:

SELECT NOW() - INTERVAL FLOOR(RAND() * 14) DAY; 
+0

Esta es una respuesta realmente antigua y realmente vieja, pero esto resolvió un problema donde tuve que presentar más de 300 fechas al azar. ¡Gracias! –

+0

@IsmaelMiguel, esta es una forma muy indirecta de hacerlo. Use timestamps http://stackoverflow.com/a/28944156/632951, es más sencillo y menos propenso a errores. – Pacerier

+1

@Pacerier - Ambos métodos se ven bien para mí (y bastante similares). ¿Qué posibles errores tienes en mente? –

6

Su principal problema es que RAND() no permite un rango de valores como se especifica. Siempre devolverá un valor entre 0 y 1.

No puedo encontrar una solución aleatoria 1..14 en este momento, pero para comenzar, se elegirá una fecha aleatoria en los últimos 10 días:

SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY)) 
11
UPDATE mytable 
SET col = CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 14) DAY 

ajusta col a una fecha entre (e incluyendo) la fecha actual y la fecha actual - 13 días. Multiplique por 15 para obtener la fecha actual: 14 días.

Cuestiones relacionadas