gpt4 book ai didi

sql - 固定间隔内独特的随机时间生成

转载 作者:行者123 更新时间:2023-12-01 19:40:56 28 4
gpt4 key购买 nike

我试图为从数据集中选择的每一行生成上午 8:00 到晚上 8:00 之间的随机时间,但是,我总是得到 < em>相同每行随机值 – 我希望每行不同

表架构和数据:

╔══════╦════════════════╗
║ ID ║ CREATED_DATE ║
╠══════╬════════════════╣
║ ID/1 ║ 26/04/2014 ║
║ ID/2 ║ 26/04/2014 ║
║ ID/3 ║ 26/04/2014 ║
║ ID/4 ║ 26/04/2014 ║
║ ID/5 ║ 26/04/2014 ║
╚══════╩════════════════╝

当前 SQL 语句:

SELECT [ID]
, MyFunction.dbo.AddWorkDays(14, [CREATED_DATE]) AS [New Date]
, CONVERT(VARCHAR, DATEADD(MILLISECOND, CAST(43200000 * RAND() AS INT), CONVERT(TIME, '08:00')), 114) AS [New Time]
FROM [RandomTable]

当前结果([新时间]列中每行的相同时间):

╔══════╦════════════════╦════════════════╗
║ ID ║ New Date ║ New Time ║
╠══════╬════════════════╬════════════════╣
║ ID/1 ║ 10/05/2014 ║ 09:41:43 ║
║ ID/2 ║ 10/05/2014 ║ 09:41:43 ║
║ ID/3 ║ 10/05/2014 ║ 09:41:43 ║
║ ID/4 ║ 10/05/2014 ║ 09:41:43 ║
║ ID/5 ║ 10/05/2014 ║ 09:41:43 ║
╚══════╩════════════════╩════════════════╝

期望的结果([新时间]列中每行的不同时间):

╔══════╦════════════════╦════════════════╗
║ ID ║ New Date ║ New Time ║
╠══════╬════════════════╬════════════════╣
║ ID/1 ║ 10/05/2014 ║ 09:41:43 ║
║ ID/2 ║ 10/05/2014 ║ 15:05:23 ║
║ ID/3 ║ 10/05/2014 ║ 10:01:05 ║
║ ID/4 ║ 10/05/2014 ║ 19:32:45 ║
║ ID/5 ║ 10/05/2014 ║ 08:43:15 ║
╚══════╩════════════════╩════════════════╝

关于如何解决这个问题有什么想法吗?以上所有内容都只是示例数据 - 我的真实表有大约 2800 条记录(不确定这是否会对任何人的建议产生影响)。

最佳答案

仅使用 rand()OP 遇到的问题是由于它每个查询一次进行评估。

来自 documentation :

If seed is not specified, the SQL Server Database Engine assigns a seed value at random. For a specified seed value, the result returned is always the same.

下面描述的方法消除了优化并抑制了这种行为,因此 rand() 每行计算一次:

dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
  • newid()生成类型 uniqueidentifier 的唯一值;
  • 该值通过 cast 进行转换,用作 rand([seed]) 中的种子函数生成从 0 到 1 的伪随机 float 值,并且由于 seed 始终是唯一的,因此返回值也是唯一的。<

SQLFiddle

关于sql - 固定间隔内独特的随机时间生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23314054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com