冒险工作日期和随机时间从现有表中连接,但每行获得相同的值
Posted
技术标签:
【中文标题】冒险工作日期和随机时间从现有表中连接,但每行获得相同的值【英文标题】:Adventure works date and random time concat from existing table but getting same value for each row 【发布时间】:2022-01-04 18:13:23 【问题描述】:在命令行查询中执行一个函数,期望冒险作品中的每一行都有不同的时间
select concat(convert(varchar, OrderDate, 101),' ',format(FLOOR(RAND()*(23-0+0))+0,'00'),':',format(FLOOR(RAND()*(59-0+0))+0 ,'00'),':',format(FLOOR(RAND()*(59-0+0))+0,'00'))
from sales.salesorderheader soh
result
05/31/2011 03:36:09
05/31/2011 03:36:09
05/31/2011 03:36:09
05/31/2011 03:36:09
05/31/2011 03:36:09
05/31/2011 03:36:09
expecting
orderdate:31/05/2011 08:25:56 @newtime:19:57:27 order id :43668
orderdate:31/05/2011 08:25:56 @newtime:20:08:04 order id :43669
orderdate:31/05/2011 08:25:56 @newtime:09:06:01 order id :43670
orderdate:31/05/2011 08:25:56 @newtime:07:09:51 order id :43671
orderdate:31/05/2011 08:25:56 @newtime:03:32:39 order id :43672
有解决办法吗?
【问题讨论】:
为什么您希望每行的时间不同?根据documentation:“具有相同种子值的 RAND() 重复调用返回相同的结果。” 【参考方案1】:只是为了好玩,这里有一种方法,我们将日期时间转换为浮点数并为时间部分添加一个随机小数。
示例
Declare @YourTable table (Orderdate datetime)
Insert Into @YourTable values
('2021-11-26 9:33')
,('2021-11-26 10:15')
Select OrderDate
,RandomTime = convert(datetime,
floor(convert(float,OrderDate))
+(abs(convert(bigint,hashbytes('md5',concat('',newid()))) / 100000.0 )) % 1
)
From @YourTable
结果
OrderDate RandomTime
2021-11-26 09:33:00.000 2021-11-26 17:19:22.653 -- random time
2021-11-26 10:15:00.000 2021-11-26 05:27:41.440 -- random time
【讨论】:
以上是关于冒险工作日期和随机时间从现有表中连接,但每行获得相同的值的主要内容,如果未能解决你的问题,请参考以下文章