我为您的问题编写此代码
此代码适用于一名员工,您可以使用一个光标或同时为所有员工扩展此代码。
此选择用于将样本数据生成到临时表中
SELECT *
INTO #DATA
FROM (
VALUES
(1001,'2020-01-01','09:14' , '06:45'),
(1001,'2020-01-02','08:20' , '06:15'),
(1001,'2020-01-03','07:14' , '06:20'),
(1001,'2020-01-04','09:30' , '07:00'),
(1001,'2020-01-05','09:20' , '06:30'),
(1001,'2020-01-06','09:14' , '06:40'),
(1001,'2020-01-07','08:45' , '06:10'),
(1001,'2020-01-08','08:30' , '07:45'),
(1001,'2020-01-09','08:14' , '07:15')
) AS F(EMPID , PURCHDATE,INTIME,OUTETIME)
-- the time must be add in random value is 3:24
DECLARE @AddedTime TIME = '3:24'
使用此代码将您的时间转换为分钟,因为如果您有秒,您将在此代码中添加大约秒,并将所有分钟日期部分更改为秒
DECLARE @AddedTimeAsMinute INT = DATEPART(HOUR , @AddedTime) * 60 + DATEPART(MINUTE , @AddedTime)
---------------------------------------------------------
PRINT @AddedMinute
---------------------------------------------------------
这部分用于获取最小和最大日期,并在它们之间选择一个随机日期。
DECLARE @DiffDate INT
DECLARE @StartDate DATE = '2020-01-01',@EndDate DATE = '2020-01-09'
SELECT @DiffDate = DATEDIFF(DAY,@StartDate ,@EndDate )
之后,您可以随机选择一天,并在超时时添加随机分钟
WHILE @AddedTimeAsMinute > 0
BEGIN
DECLARE @AddMinute INT= (SELECT FLOOR(RAND()*(@AddedTimeAsMinute - 1))+1)
SELECT *,CAST(DATEADD(MINUTE,@AddMinute,OUTETIME) AS TIME) NEWTIME
FROM #DATA
WHERE DAY(PURCHDATE) = FLOOR(RAND()*(@DiffDate - 1 + 1)) +1
AND EMPID = 1001
SET @AddedTimeAsMinute = @AddedTimeAsMinute - @AddMinute
END
DROP TABLE #DATA
您可以将 while 循环的核心放入任何员工数据的游标中