2010-12-28 32 views

Trả lời

58

Bạn có thể nhận được một số nguyên ngẫu nhiên với biểu thức này:

Để có được một số nguyên R ngẫu nhiên trong phạm vi i < = R < j, sử dụng biểu thức FLOOR(i + RAND() * (j - i)). Đối với Ví dụ, để có được một số nguyên ngẫu nhiên trong phạm vi phạm vi 7 < = R < 12, bạn có thể sử dụng câu lệnh sau:

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

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

Sử dụng đó để tạo ra một ngẫu nhiên số ngày, giờ hoặc phút (tùy thuộc vào độ phân giải) và thêm số đó vào ngày hiện tại. Biểu thức đầy đủ sẽ có dạng như sau:

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

Đây là câu hỏi thực sự cũ, nhưng điều này giải quyết được vấn đề mà tôi phải giới thiệu trên 300 ngày ngẫu nhiên. Cảm ơn bạn! –

+0

@IsmaelMiguel, Đây thực sự là một cách rất gián tiếp để thực hiện nó. Sử dụng dấu thời gian http://stackoverflow.com/a/28944156/632951, lỗi đơn giản hơn và dễ bị lỗi hơn. – Pacerier

+1

@Pacerier - Cả hai phương pháp đều ổn với tôi (và khá giống). Bạn nghĩ gì về những lỗi tiềm năng? –

6

vấn đề chính của bạn là RAND() không cho phép một loạt các giá trị như bạn chỉ định. Nó sẽ luôn trả về giá trị từ 0 đến 1.

Tôi không thể giải quyết một giải pháp ngẫu nhiên 1.14 ngay bây giờ, nhưng để bắt đầu, điều này sẽ chọn một ngày ngẫu nhiên trong vòng 10 ngày qua:

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

này đặt col đến một ngày giữa (và bao gồm) ngày hiện tại và ngày hiện tại - 13 ngày. Nhân với 15 để có ngày hiện tại - 14 ngày.

Các vấn đề liên quan