Comment pourrais-je mettre à jour une colonne avec une date aléatoire au cours des 2 dernières semaines en utilisant MySQL?
Par exemple (le code ne fonctionne pas réellement):
UPDATE mytable
SET col = sysdate() - Rand(1, 14);
Vous pouvez obtenir un entier aléatoire avec cette expression:
Pour obtenir un entier aléatoire R dans la plage i <= R <j, utilisez l'expression
FLOOR(i + Rand() * (j - i))
. Par exemple, pour obtenir un entier aléatoire dans la plage 7 <= R <12, vous pouvez utiliser l'instruction suivante:SELECT FLOOR(7 + (Rand() * 5));
http://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html
Utilisez-le pour générer un nombre aléatoire de jours, d'heures ou de minutes (selon la résolution) et ajoutez ce nombre à la date actuelle. La pleine expression serait quelque chose comme ceci:
SELECT NOW() - INTERVAL FLOOR(Rand() * 14) DAY;
UPDATE mytable
SET col = CURRENT_TIMESTAMP - INTERVAL FLOOR(Rand() * 14) DAY
Cela définit col
à une date comprise entre (et incluant) la date actuelle et la date actuelle - 13 jours. Multipliez par 15 pour obtenir la date actuelle - 14 jours.
Votre principal problème est que Rand()
ne permet pas une plage de valeurs comme vous le spécifiez. Il renverra toujours une valeur entre 0 et 1.
Je ne peux pas trouver de solution aléatoire de 1 à 14 pour le moment, mais pour commencer, cela choisira une date aléatoire au cours des 10 derniers jours:
SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(Rand(1)*10) DAY))