Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Generazione di tempo casuale distinta nell'intervallo fisso

Il problema OP avuto usando solo rand() è dovuto alla sua valutazione una volta per query .

Dalla documentazione :

L'approccio descritto di seguito rimuove l'ottimizzazione e sopprime questo comportamento, quindi rand() viene valutato una volta per riga :

dateadd( second
       , rand(cast(newid() as varbinary)) * 43200
       , cast('08:00:00' as time) )
  • newid() genera un valore univoco di tipo uniqueidentifier ;
  • il valore viene convertito con cast da usare come seme in rand([seed]) funzione per generare un float pseudo-casuale valore da 0 a 1 e come seme è sempre unico anche il valore restituito è unico.

SQLFiddle