2010-12-28 2 views
37

Come aggiornare una colonna con una data casuale nelle ultime 2 settimane utilizzando MySQL?Inserisci/Aggiorna data casuale in MySQL

Per esempio (codice in realtà non funziona):

UPDATE mytable 
SET col = sysdate() - rand(1, 14); 

risposta

58

è possibile ottenere un numero intero casuale con questa espressione:

Per ottenere un casuale intero R nella gamma i < = R < j, utilizzare l'espressione FLOOR(i + RAND() * (j - i)). Ad esempio, per ottenere un numero intero casuale in range range 7 < = R < 12, si possibile utilizzare la seguente dichiarazione:

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

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

Usa che per generare un caso numero di giorni, ore o minuti (a seconda della risoluzione) e aggiungere quel numero alla data corrente. La piena espressione sarebbe qualcosa del genere:

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

Questa è una risposta molto vecchia e una domanda molto vecchia, ma questo ha risolto un problema in cui dovevo introdurre oltre 300 date casuali. Grazie! –

+0

@IsmaelMiguel, Questo è in realtà un modo molto indiretto di farlo. Usa timestamp http://stackoverflow.com/a/28944156/632951, è più semplice e meno incline agli errori. – Pacerier

+1

@Pacerier: entrambi i metodi mi sembrano soddisfacenti (e abbastanza simili). Quali potenziali errori hai in mente? –

6

vostro problema principale è che RAND() non permette un range di valori come specificato. Restituirà sempre un valore compreso tra 0 e 1.

Al momento non riesco a trovare una soluzione casuale 1..14, ma per iniziare, selezioneremo una data casuale negli ultimi 10 giorni:

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

Questa imposta col ad una data compresa tra (compreso) la data corrente e la data corrente - 13 giorni. Moltiplicare per 15 per ottenere la data corrente - 14 giorni.