Vi potrebbe capitare di aver bisogno di generare date casuali all’interno di un database MySql, lo potrete fare molto semplicemente.
Seguono subito degli esempi di query che potrete testare su una tabella il quale dump è alla fine di questo articolo.
Un esempio: date casuali nel passato
UPDATE eventi SET data = NOW() - INTERVAL RAND()*86400*30 second
Imposta la colonna "data" a oggi (NOW) meno un numero casuale di secondi da 0 a 86400*30, ovvero genera date casuali da oggi a 30 giorni fa.
Ogni riga avrà una data differente.
Al posto di second puoi anche inserire day, minute…
per esempio:
UPDATE eventi SET data = NOW() - INTERVAL RAND()*7 day
Genera date casuale da oggi a 7 giorni fa (minuti e secondi non vengono modificati rispetto a NOW).
Date casuali nel futuro
Ovviamente è anche possibile generare date nel futuro inserendo un più al posto del meno:
UPDATE eventi SET data = NOW() + INTERVAL RAND()*7 day
Genera date da oggi a a oggi + 7 giorni.
Date a random nel passato e nel futuro
Se vi servisse usare date casuali sia nel passato che nel futuro potreste usare l’IF e nuovamente il RAND()
UPDATE eventi
In questo caso quando RAND > 0.5 viene generata una data nel futuro (quindi la metà delle volte), altrimenti nel passato.
SET data = (IF((RAND() > 0.5),
(NOW() + INTERVAL RAND()*7 day),
(NOW() - INTERVAL RAND()*7 day)))
Ovviamente potrete cambiare la condizione RAND() > 0.5 a vostro piacimento
Tabella di riferimento
Tutte le query di esempio sono state testate sulla seguente tabella che potrete utilizzare per i vostri test:
CREATE TABLE eventi (
id int(11) NOT NULL auto_increment,
data timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
segnalato_da varchar(128) NOT NULL,
descrizione varchar(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5;
INSERT INTO eventi (id, data, segnalato_da, descrizione) VALUES
(1, '2008-03-29 12:47:56', 'Alessandro', 'Scrive un articolo.'),
(2, '2008-03-29 12:48:19', 'Marco', 'Danneggia un database da 2 milioni di euro'),
(3, '2008-03-29 12:49:14', 'GianMa', 'Salva il database danneggiato con molta classe.'),
(4, '2008-03-29 12:49:14', 'Giulio', 'Crea una città nel suo gioco preferito.');