Bra*_*don 7 sql sql-server sql-server-2008 random-time-generation
我正在尝试生成一个包含SQL Server 2008中的时间数据类型的大型数据集.我已经在表中有一些非时间数据,所以我想将整个过程保留在T-SQL中并使用insert-into-选择从一个表中获取部分数据并将其与包含时间的一些生成数据一起插入到下一个表中.
我想要一种在两点之间产生随机时间(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'))
为了放入你的新表,你可以做一个带有更新的T-SQL循环(s ... l ... o ... w ...),或者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
Run Code Online (Sandbox Code Playgroud)