2014-11-02 10 views
9

Chciałbym utworzyć losową datę dla zapytania aktualizacji SQL Server. Znalazłem wiele przykładów na przypadkowe dni lub coś podobnego, ale nie mogłem znaleźć czegoś, co tworzy losową datę z losową datą, godzinami, minutami, sekundami i milisekundami.Serwer SQL: losowa data w określonym zakresie (w tym losowe godziny, minuty, ...)

To jest to, czego używam do utworzenia daty losowo, ale zawsze daje mi 00 jako godzinę, minutę, sekundy i milisekundy i nie wiem, jak mogę je dobrać losowo.

To moje zapytanie:

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) 

Odpowiedz

8

ten sposób zrobiłbym to:

  1. wypracować liczbę sekund między zi do
  2. Zdobądź losową liczbę od zera i liczba sekund
  3. Dodaj tę liczbę losową do FromDate
  4. Wreszcie losowo liczbę milisekund s

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

rzeczywiście daje losową datę, ale nie w określonym zakresie. Atm Zastanawiam się, jak dostosować to do określonego zakresu. – kentor

+0

Dlaczego w dół ??? –

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

nie generuje losowej daty – omerts

Powiązane problemy