2014-11-02 100 views
9

我想爲SQL Server更新查詢創建隨機日期。我發現了很多隨機日子或類似的例子,但我找不到隨機日期,小時,分鐘,秒和毫秒創建隨機日期的東西。SQL Server:在特定範圍內的隨機日期(包括隨機小時,分鐘,...)

這就是我用它來隨機創建日期,但它總是給我00小時,分鐘,秒和毫秒,我不知道如何隨機化它們。

這是我的查詢:

declare @FromDate date = GETDATE()-2 
declare @ToDate date = GETDATE()-1 

UPDATE ACCOUNTS 
SET dateFinished= 
dateadd(day, rand(checksum(newid())) * (1 + datediff(day, @FromDate, @ToDate)), @FromDate) 

回答

8

這是我會怎麼做它:

  1. 制定的秒數從和
  2. 之間獲得零之間的隨機數秒數
  3. 將該隨機數添加到FromDate
  4. 最後隨機數的毫秒數小號

DECLARE @FromDate DATETIME = DATEADD(DAY, -2, GETDATE()) 
DECLARE @ToDate DATETIME = DATEADD(DAY, -1, GETDATE()) 

DECLARE @Seconds INT = DATEDIFF(SECOND, @FromDate, @ToDate) 
DECLARE @Random INT = ROUND(((@Seconds-1) * RAND()), 0) 
DECLARE @Milliseconds INT = ROUND((999 * RAND()), 0) 

SELECT DATEADD(MILLISECOND, @Milliseconds, DATEADD(SECOND, @Random, @FromDate)) 
0
SELECT dateaddDATEADD(second, 
      second, (rand()*60+1), 
      DATEADD(minute, 
        (rand()*60+1) , 
        DATEADD(day, 
          (rand()*365+1), 
          DATEADD(year, 
            -1, 
            getdate())))) 
+0

實際上給出了一個隨機的日期,而不是在一個特定的範圍。 Atm我正在考慮如何適應特定的範圍。 – kentor 2014-11-02 12:27:11

+0

爲什麼downvote ??? – 2015-12-05 14:25:38

0
declare @FromDate dateTIME = '2014-01-01' 
declare @ToDate dateTIME = '2014-12-31' 

select top 100 dateadd(day,rand(checksum(newid()))*(1+datediff(day, @FromDate, @ToDate)), @FromDate) FROM Tabled(give your table name) 
+0

不會隨機生成一個日期 – omerts 2017-07-30 18:44:47

相關問題