生成2023年1月3-16日符合规则的650条TSQL随机日期
TSQL生成指定范围的工作日随机时间数据(精确到毫秒)
以下TSQL脚本可生成650条符合要求的随机日期数据:
WITH WorkDays AS ( SELECT DateValue = CAST('2023-01-03' AS DATE) UNION ALL SELECT DATEADD(DAY, 1, DateValue) FROM WorkDays WHERE DateValue < '2023-01-16' AND DATENAME(WEEKDAY, DateValue) NOT IN ('Saturday', 'Sunday') ), Numbers AS ( SELECT TOP 650 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Num FROM sys.all_columns ac1 CROSS JOIN sys.all_columns ac2 ) SELECT RandomDateTime = CAST(wd.DateValue AS DATETIME2(3)) + CAST('09:00:00.000' AS DATETIME2(3)) + DATEADD(MILLISECOND, ABS(CHECKSUM(NEWID())) % 28800000, CAST('00:00:00.000' AS DATETIME2(3))) FROM Numbers n CROSS APPLY ( SELECT TOP 1 DateValue FROM WorkDays ORDER BY NEWID() ) wd ORDER BY RandomDateTime;
关键逻辑说明
- 工作日筛选:通过递归CTE
WorkDays生成2023-01-03至2023-01-16的所有日期,并用DATENAME(WEEKDAY)排除周六和周日。 - 批量生成记录:利用
sys.all_columns交叉连接快速生成650行的序列,无需手动创建临时表。 - 精准时间控制:计算工作时段(9:00 AM到5:00 PM)的总毫秒数(28800000),通过
NEWID()生成随机偏移量,确保时间落在指定区间内,且DATETIME2(3)类型保证毫秒级精度。 - 随机分配工作日:通过
CROSS APPLY结合ORDER BY NEWID()为每条记录随机选取一个工作日,避免数据集中在某几天。
内容的提问来源于stack exchange,提问作者Zedverse
相关产品推荐
相关产品推荐

