sql >> Databasteknik >  >> RDS >> Sqlserver

Distinkt slumpmässig tidsgenerering i det fasta intervallet

Problemet OP hade när du bara använde rand() beror på dess utvärdering en gång per fråga .

Från dokumentationen :

Tillvägagångssätt som beskrivs nedan tar bort optimering och undertrycker detta beteende, så rand() utvärderas en gång per rad :

dateadd( second
       , rand(cast(newid() as varbinary)) * 43200
       , cast('08:00:00' as time) )
  • newid() genererar ett unikt värde av typen uniqueidentifier ;
  • värdet konverteras med cast att användas som frö i rand([seed]) funktion för att generera en pseudoslumpmässig float värde från 0 till 1 , och som frö är alltid unikt det returnerande värdet är också unikt .

SQLFiddle



  1. Är flera främmande nycklar vettiga?

  2. Exempel på att konvertera "datum" till "datetime2" i SQL Server (T-SQL)

  3. Hur ändrar jag datumformatet i Postgres?

  4. Effektivt sätt att få @@rowcount från en fråga med hjälp av row_number