web-dev-qa-db-fra.com

Insérer / mettre à jour une date aléatoire dans MySQL

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);
47
Blair

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;
75
Álvaro González
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.

15
Salman A

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)) 
6
Pekka 웃