2010-12-28 16 views
37

MySQL kullanarak son 2 hafta içinde bir sütunu rastgele bir tarihle nasıl güncelleştiririm? ÖrneğinMySQL'te rasgele tarih ekle/Güncelle

(kod aslında çalışmıyor):

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

cevap

58

Bu ifade ile rasgele bir tamsayı almak:

ifade FLOOR(i + RAND() * (j - i)) kullanmak, I < = R < j aralığında rasgele bir tam sayı R elde etmek.

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

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

kullanımı rasgele oluşturmak için: Örneğin aralığı içinde aralığı 7 < = R < 12 rasgele bir tamsayı edinmek için, aşağıdaki ifadeyi kullanabilirsiniz gün sayısına, saatlere veya dakikalara (çözünürlüğe bağlı olarak) ve bu sayıyı geçerli tarihe ekleyin. Tam ifadeniz şöyle bir şey olurdu:

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

Bu gerçekten eski bir cevap ve gerçekten eski bir soru, ama bu aşkın 300 rasgele tarihleri ​​tanıtmak zorunda sorunu çözdü. Teşekkür ederim! –

+0

@IsmaelMiguel, Bu aslında bunu yapmanın çok dolaylı bir yoludur. Zaman damgası kullanın http://stackoverflow.com/a/28944156/632951, daha basit ve hatalara daha az eğilimli. – Pacerier

+1

@Pacerier - Her iki yöntem bana iyi görünüyor (ve oldukça benzer). Aklında ne gibi hatalar var? –

6

asıl sorununuz belirttiğiniz gibi RAND() bir değer aralığını izin vermez olmasıdır. Her zaman 0 ile 1 arasında bir değer döndürecektir.

Şu anda 1,.14 rastgele bir çözüm üretemiyorum, ancak başlamanıza yardımcı olmak için son 10 gün içinde rastgele bir tarih seçecektir:

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

Bu (ve dahil) geçerli tarih ve geçerli tarih arasında bir tarihe col ayarlar. Geçerli tarih elde etmek için 15 ile çarpın - 14 gün.