Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Génération de temps aléatoire distincte dans l'intervalle fixe

Le problème OP eu en utilisant juste rand() est dû à son évaluation une fois par requête .

De la documentation :

L'approche décrite ci-dessous supprime l'optimisation et supprime ce comportement, donc rand() est évalué une fois par ligne :

dateadd( second
       , rand(cast(newid() as varbinary)) * 43200
       , cast('08:00:00' as time) )
  • newid() génère une valeur unique de type uniqueidentifier ;
  • la valeur est convertie avec cast à utiliser comme graine dans rand([seed]) fonction pour générer un float pseudo-aléatoire valeur de 0 à 1 , et comme graine est toujours unique, la valeur renvoyée est également unique .

SQLFiddle