我有一个名为#RandomDates的临时表,在SQLServer:中看起来像这样
╔════╦═════════════╦══════════╦══════════════════╦════════════════════════════════╦═══════════════════════╗
║ ID ║ Description ║ RaceType ║ RaceStartTime ║ AverageCompletionTimeInMinutes ║ PredictCompletionTime ║
╠════╬═════════════╬══════════╬══════════════════╬════════════════════════════════╬═══════════════════════╣
║ 1 ║ Player1 ║ RaceA ║ 2025-05-10 10:00 ║ 120 ║ NULL ║
╠════╬═════════════╬══════════╬══════════════════╬════════════════════════════════╬═══════════════════════╣
║ 2 ║ Player2 ║ RaceA ║ 2025-05-12 17:00 ║ 120 ║ NULL ║
╠════╬═════════════╬══════════╬══════════════════╬════════════════════════════════╬═══════════════════════╣
║ 3 ║ Player3 ║ RaceC ║ 2025-08-12 08:15 ║ 60 ║ NULL ║
╠════╬═════════════╬══════════╬══════════════════╬════════════════════════════════╬═══════════════════════╣
║ 5 ║ Player4 ║ RaceY ║ 2025-08-29 16:00 ║ 10 ║ NULL ║
╠════╬═════════════╬══════════╬══════════════════╬════════════════════════════════╬═══════════════════════╣
║ 6 ║ Player4 ║ RaceY ║ 2025-08-30 21:00 ║ 10 ║ NULL ║
╚════╩═════════════╩══════════╩══════════════════╩════════════════════════════════╩═══════════════════════╝
我想更新列";预测完成时间";随机日期,但我需要它们基于值列的";RaceStartTime";以及";AverageCompletionTimeInMinutes";。
ID=1 的示例
- 比赛将于2025-05-10 10:00举行
- RaceA平均需要120分钟才能完成
- 我想要我的随机化";预测完成时间";列介于:
RaceStartTime+AverageCompletionTimeInMinutes+随机添加或减去少量的分钟和秒(比如说5到10分钟(
因此此示例的有效日期可能是:
2025-05-10 12:07:20
2025-05-10 11:59:40
我试过用RAND((*来做这件事,但出于某种原因,我的";PredictCompletonTime";列不断更新每个RaceType的重复值。
提前感谢
这里有一个例子,因此random将在第二秒内为每一行创建一个介于@MinTime和AverageCompletionTimeInMinutes
之间的随机数,并将添加到RaceStartTime
:
DECLARE @MinTime int = 300 -- in second
UPDATE #tablename
SET PredictCompletionTime = DATEADD(SECOND ,ROUND(RAND() * (AverageCompletionTimeInMinutes*60 - @MinTime) , 0),RaceStartTime )
FROM #tablename