Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Geração de tempo aleatório distinto no intervalo fixo


O problema OP tinha usando apenas rand() é devido à sua avaliação uma vez por consulta .

Da documentação :

A abordagem descrita abaixo remove a otimização e suprime esse comportamento, então rand() é avaliado uma vez por linha :
dateadd( second
       , rand(cast(newid() as varbinary)) * 43200
       , cast('08:00:00' as time) )
  • newid() gera valor exclusivo do tipo uniqueidentifier ;
  • o valor é convertido com cast para ser usado como semente em rand([seed]) função para gerar um float pseudo-aleatório valor de 0 a 1 , e como semente é sempre único o valor de retorno também é único .

SQLFiddle