7

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

我想要一种在两点之间生成随机时间(7)的方法,比如 8:00 到 9:00 之间的随机时间。我发现了一些 2008 年之前的帖子,但没有任何内容涉及 SQL Server 2008 的时间类型。

4

2 回答 2

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'))

为了放入您的新表中,您可以使用更新 (s...l...o...w...) 执行 T-SQL 循环,或者SELECT INTO从原始表执行桌子。

于 2010-12-06T00:09:03.687 回答
5

要生成 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
于 2010-12-06T00:08:29.163 回答