我正在尝试在 SQL Server 2008 中生成一个包含时间数据类型的大型数据集。我已经在表中有一些非时间数据,所以我想将整个过程保留在 T-SQL 中并使用插入到-选择从一个表中获取部分数据并将其与一些生成的数据(包括时间)一起插入到下一个表中。
我想要一种在两点之间生成随机时间(7)的方法,比如 8:00 到 9:00 之间的随机时间。我发现了一些 2008 年之前的帖子,但没有任何内容涉及 SQL Server 2008 的时间类型。
我正在尝试在 SQL Server 2008 中生成一个包含时间数据类型的大型数据集。我已经在表中有一些非时间数据,所以我想将整个过程保留在 T-SQL 中并使用插入到-选择从一个表中获取部分数据并将其与一些生成的数据(包括时间)一起插入到下一个表中。
我想要一种在两点之间生成随机时间(7)的方法,比如 8:00 到 9:00 之间的随机时间。我发现了一些 2008 年之前的帖子,但没有任何内容涉及 SQL Server 2008 的时间类型。
一天有 86,400,000 毫秒,所以你可以通过这样做得到一个随机的时间值:
select dateadd(millisecond, cast(86400000 * RAND() as int), convert(time, '00:00'))
对于您希望时间在 8:00 和 9:00 之间的示例,一小时有 3,600,000 毫秒,因此请像这样修改查询。
select dateadd(millisecond, cast(3600000 * RAND() as int), convert(time, '08:00'))
为了放入您的新表中,您可以使用更新 (s...l...o...w...) 执行 T-SQL 循环,或者SELECT INTO
从原始表执行桌子。
要生成 100 行测试数据,您可以使用以下内容。
WITH E00(N) AS (SELECT 1 UNION ALL SELECT 1),
E02(N) AS (SELECT 1 FROM E00 a, E00 b),
E04(N) AS (SELECT 1 FROM E02 a, E02 b),
E08(N) AS (SELECT 1 FROM E04 a, E04 b),
E16(N) AS (SELECT 1 FROM E08 a, E08 b),
E32(N) AS (SELECT 1 FROM E16 a, E16 b)
SELECT TOP 100 CAST(DATEADD(SECOND,ABS(CHECKSUM(NEWID()))%3600,'08:00') AS TIME)
FROM E32