2017-10-09 49 views
-1

如何在特定的包含範圍內選擇隨機日期,比如說'1950-01-01'和'1999-12-31'用mysql工作臺?我嘗試這個,但它不工作,建議任何功能的方法,會更有幫助。我還發現,其他問題也屬於隨機日期時間,但我想還可以指定像一些次隨機數談到的同一天和某個談到接下來的一天,我的要求是與其他問題不同的指定如何在mysql的範圍內獲得隨機日期(不是時間)

select DateAdd(DD, ROUND(DateDiff(DD, '22-09-2016', '24-10-2016') * RAND(), 0) DD, '22-09-2016') 

回答

1

這個答案採用計算兩個日期之間差異的方法,然後在0和整個差異範圍內向開始日期添加一個隨機數。

SELECT 
    DATE_ADD('1950-01-01', 
      INTERVAL FLOOR(RAND() * DATEDIFF('1999-12-31', '1950-01-01')) DAY) AS new_date 
FROM dual; 

我沒有測試你的代碼,但一個明顯的錯誤現在是您存儲和寫日期的方式:

22-09-2016 

這種格式是不符合ANSI標準,和MySQL的最新功能可能會不能正常工作。相反,始終使用以年 - 月 - 日格式使用日期,或者與此非常相似。

演示在這裏:

Rextester

+1

正確我很快就知道它不工作..感謝您的評論。 –

+1

感謝您的額外信息。 –

1

您將獲得隨機數與DATEDIFFRAND功能,例如:

SELECT (FLOOR(RAND() * DATEDIFF('2016-10-22', '2016-09-24'))); 

完成後,您可以使用DATE_ADD添加這些多天,例如:

SELECT DATE_ADD('2016-09-24', INTERVAL (SELECT (FLOOR(RAND() * DATEDIFF('2016-10-22', '2016-09-24')))) DAY); 

這是SQL Fiddle

+0

你的第二個答案中不需要子查詢。 –

+0

瞭解它,但如果日期差異很大,則需要很長時間,但這是個好主意。對於小日期差異。感謝您的評論 –

+0

你已經使用select關鍵字後間隔如此稍微改變需要在這個查詢,雖然你的做法是好的。 –

相關問題