รูปแบบคำสั่ง
INSERT INTO yourTableName VALUES (CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
สร้างตารางและทดสอบ
mysql> create table DemoTable1983 ( DueDate timestamp );
mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY); mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY); mysql> insert into DemoTable1983 values(CURRENT_TIMESTAMP - INTERVAL ABS(RAND() * 100) DAY);
ผลลัพธ์ตัวอย่าง (วันที่รันคือ 2019-12-18 19:36:17)
+---------------------+ | DueDate | +---------------------+ | 2019-12-10 19:35:43 | | 2019-10-27 19:35:44 | | 2019-11-10 19:35:45 | +---------------------+
อธิบายการทำงาน
RAND()สร้างเลขสุ่ม 0.0000... ถึง 0.9999...RAND() * 100→ 0 ถึง 99.99...ABS(...)ค่าสัมบูรณ์ (ป้องกันค่าลบ แม้ RAND() จะไม่ติดลบ)INTERVAL ... DAYแปลงเป็นช่วงเวลาวันCURRENT_TIMESTAMP - ...ลบย้อนหลังจากเวลาปัจจุบัน
ปรับช่วงวันที่สุ่ม
-- สุ่ม 0-30 วัน (1 เดือน) CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 30) DAY -- สุ่ม 0-365 วัน (1 ปี) CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 365) DAY -- สุ่มระหว่าง 30-60 วันก่อน CURRENT_TIMESTAMP - INTERVAL (30 + FLOOR(RAND() * 30)) DAY
ใช้กับ DATE แทน TIMESTAMP
INSERT INTO table (date_col) VALUES (CURDATE() - INTERVAL FLOOR(RAND() * 100) DAY);
กรณีต้องการ Fixed Seed (Reproducible)
-- MySQL ไม่มี SET SEED() ตรงๆ แต่สามารถใช้ได้ดังนี้ SET @seed = 12345; INSERT INTO table VALUES (CURRENT_TIMESTAMP - INTERVAL ABS(RAND(@seed) * 100) DAY);