Jak zaktualizować kolumnę z losową datą w ciągu ostatnich 2 tygodni używając MySQL?Wstawianie/aktualizowanie losowej daty w MySQL
Na przykład (kod faktycznie nie działa):
UPDATE mytable
SET col = sysdate() - rand(1, 14);
Jak zaktualizować kolumnę z losową datą w ciągu ostatnich 2 tygodni używając MySQL?Wstawianie/aktualizowanie losowej daty w MySQL
Na przykład (kod faktycznie nie działa):
UPDATE mytable
SET col = sysdate() - rand(1, 14);
Można uzyskać liczbę losową z tego wyrażenia:
Aby otrzymać liczbę losową R w zakresie i < = R < j, użyć wyrażenia
FLOOR(i + RAND() * (j - i))
. Dla przykład, aby uzyskać liczbę losową w RANGĘ zakres 7 < = R < 12, to może wykorzystać następujące stwierdzenie:SELECT FLOOR(7 + (RAND() * 5));
http://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html
używa ich do generowania losowego liczbę dni, godzin lub minut (w zależności od rozdzielczości) i dodaj ten numer do bieżącej daty. Pełne wyrażenie byłoby coś takiego:
SELECT NOW() - INTERVAL FLOOR(RAND() * 14) DAY;
Twoim głównym problemem jest to, że nie pozwala RAND()
zakres wartości jak można określić. Zawsze zwróci wartość z przedziału od 0 do 1.
Nie mogę teraz opracować rozwiązania losowego 1..14, ale aby rozpocząć, zostanie wybrana losowa data z ostatnich 10 dni:
SET col = DATE(DATE_SUB(NOW(), INTERVAL ROUND(RAND(1)*10) DAY))
UPDATE mytable
SET col = CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 14) DAY
ustawia col
do daty pomiędzy (włącznie) aktualna data i aktualna data - 13 dni. Pomnóż przez 15, aby uzyskać aktualną datę - 14 dni.
To jest naprawdę stara odpowiedź i naprawdę stare pytanie, ale rozwiązało to problem, w którym musiałem wprowadzić ponad 300 losowych dat. Dziękuję Ci! –
@IsmaelMiguel, Jest to bardzo pośredni sposób robienia tego. Użyj znaczników czasu http://stackoverflow.com/a/28944156/632951, jest bardziej prosty i mniej podatny na błędy. – Pacerier
@Pacerier - Obie metody wyglądają dobrze dla mnie (i bardzo podobne). Jakie potencjalne błędy masz na myśli? –