冒险工作日期和随机时间从现有表中连接,但每行获得相同的值

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

【讨论】:

以上是关于冒险工作日期和随机时间从现有表中连接,但每行获得相同的值的主要内容,如果未能解决你的问题,请参考以下文章

自动填充从工作表到文档的日期并获得不同的时区(谷歌脚本)

从 Excel 工作表中读取日期时间值

如何在火花中连接多个列,同时从另一个表中连接列名(每行不同)

SQL - 如何在相关表中每行获得 1 个空列?

从 SQL 表中查找下一个工作日

根据日期参数从表中选择周末或工作日数据