生成随机SQL Server 2008时间测试数据

时间:2010-12-05 23:44:23

标签: sql sql-server sql-server-2008 random-time-generation

我正在尝试生成一个包含SQL Server 2008中的时间数据类型的大型数据集。我已经在表中有一些非时间数据,所以我想将整个过程保留在T-SQL中并使用插入-into-select从一个表中获取部分数据,并将其与一些生成的数据(包括时间)一起插入到下一个表中。

我想要一种在两点之间产生随机时间(7)的方法,比如在8:00到9:00之间的随机时间。我发现了一些2008年之前的帖子,但没有解决SQL Server 2008的时间类型问题。

2 个答案:

答案 0 :(得分:8)

一天有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'))

为了进入你的新表,你可能会做一个带有更新的T-SQL循环(s ... l ... o ... w ...),或者做一个{{1}从原始表格到新表格。

答案 1 :(得分:4)

要生成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