RAND не отличается для каждой строки в T-SQL UPDATE

У меня есть следующий T-SQL для обновления таблицы с тестовыми данными:

UPDATE
SomeTable
SET
    Created = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int ) ,
    LastUpdated = GETDATE ( ) - CAST ( RAND ( ) * 365 AS int )

Я хочу, чтобы он выбрал случайные дасы в прошлом году, к сожалению, он использует одну и ту же дату для каждой строки. каков наилучший способ заставить его быть случайным в каждой строке, которую он обновляет?

Ответы

Ответ 1

Используйте RAND(CHECKSUM(NEWID()))

  • NEWID возвращает GUID
  • CHECKSUM делает его int, randomly
  • Интер-семя RAND

В вашем случае вы можете по модулю checkum, потому что CHECKSUM (NEWID()) уже является случайным.

CHECKSUM(NEWID()) % 365

Ответ 2

если вы хотите, чтобы дни из прошлого года использовали это (на основе ответа @gbn):

select GETDATE ( ) - ABS( CHECKSUM(NEWID()) % 365 )