2014-11-02 17 views
9

Vorrei creare una data casuale per una query di aggiornamento di SQL Server. Ho trovato molti esempi per giorni casuali o qualcosa di simile ma non sono riuscito a trovare qualcosa che crea una data casuale con data, ore, minuti, secondi E millisecondi casuali.SQL Server: data casuale nell'intervallo specifico (incluse ore casuali, minuti, ...)

Questo è quello che uso per creare la data casualmente ma mi dà sempre 00 come ora, minuti, secondi e millisecondi e non so come posso randomizzarli.

Questa è la mia domanda:

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) 

risposta

8

Ecco come lo farei:

  1. Calcolare il numero di secondi tra da e per
  2. Ottenere un numero casuale tra zero e il numero di secondi
  3. Aggiungi quel numero casuale al FromDate
  4. Infine casualmente il numero di millisecondo 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

dà realtà una data casuale, ma non in un intervallo specifico. Atm Sto pensando a come adattarlo a una gamma specifica. – kentor

+0

Perché downvote ??? –

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

non genera una sola data a tempo casuale – omerts

Problemi correlati