Sql 为每个唯一ID在日期字段中随机设置时间

Sql 为每个唯一ID在日期字段中随机设置时间,sql,sql-server,date,time,Sql,Sql Server,Date,Time,我试图根据ID字段将日期字段中的时间随机化,但似乎无法解决如何进行。我正在使用SQL server 我现在所拥有的: 身份证件 日期 144929 2020-01-28 00:00:00.000 144929 2020-01-28 00:00:00.000 144928 2020-01-28 00:00:00.000 144928 2020-01-28 00:00:00.000 对于SQL Server,您可以执行以下操作: DATEADDday,RAND,Date 如果您想要精确的点时间,可以

我试图根据ID字段将日期字段中的时间随机化,但似乎无法解决如何进行。我正在使用SQL server

我现在所拥有的:

身份证件 日期 144929 2020-01-28 00:00:00.000 144929 2020-01-28 00:00:00.000 144928 2020-01-28 00:00:00.000 144928 2020-01-28 00:00:00.000
对于SQL Server,您可以执行以下操作:

DATEADDday,RAND,Date

如果您想要精确的点时间,可以使用以下选项:

DATEADDhour,ROUNDRAND*24,0,Date

编辑:我知道您有多个ID,并且希望每个ID的值相同

您可以尝试以下方法:

挑选* 来自表t 参加 选择ID,Date=DATEADDday,RAND,MINDate 来自表t 按t.ID分组 Dates.ID上的日期=t.ID;
由于优化器处理诸如RAND之类的副作用函数的方式,您可能会被迫在加入之前先将子查询转储到临时表中。

[编辑:更新以使日期列不发生更改,只有日期时间的时间部分因ID而异]

如果使用DATEADD函数将ID值添加为“秒”,则每个ID的结果时间将不同。然后,时间将转换为DATETIME,并添加到[Date]列中,该列也将转换为“DATETIME”。不确定这是否符合随机tho。像这样的

drop table if exists #tTest;
go
create table #tTest(
  ID        int not null,
  [Date]    date not null);

insert into #tTest values
(144929, '2020-01-28'),
(144929, '2020-01-28'),
(144928, '2020-01-28'),
(144928, '2020-01-28');

select ID, cast([Date] as datetime)+
           cast(cast(dateadd(second, ID, '00:00:00') AS time) as datetime) dtm
from #tTest;

那么,您想向现有日期添加一个随机的小时数?你在使用什么数据库?用你正在使用的数据库标记你的问题。另外,最后两行表示的是什么时间。这些值看起来不正确。我不在乎时间。我只希望根据ID的不同,日期是唯一的。可以是不同的秒或分钟。@AlexK是它的SQL server,这是正确的,但我需要它是随机的,但每个ID都有相同的日期和随机时间。30:00:00是哪种时间?一天只有24小时。谢谢你,但它仍然不会根据时间改变时间ID@WisamBarakat抱歉,如果您解释了如何调整的逻辑,我将编辑我需要它为每个ID添加随机小时数。因此,值为144929的ID的日期为2020-01-28 15:00:00.000,值为144928的ID的日期为2020-01-28 16:00:00.000但在您发送的代码中,每个唯一的日期都有一个随机小时。希望这是有道理的。谢谢你,你刚锻炼好,我想我做对了。啊,我看到你评论了这么多。我试图运行上面的代码,但我得到的列“database.table.Date”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句错误中。谢谢Steve,问题是我的一些ID是字符串。所以这对他们不起作用。ID的列类型是什么?它可能是像“abc”这样的文本,或者它是存储为文本的整数?谢谢Steve,这实际上起作用了,因为其中包含文本的ID已经有了随机的日期时间。因此,我只将此应用于具有整数ID的日期。非常感谢。
ID      dtm
144929  2020-01-28 16:15:29.000
144929  2020-01-28 16:15:29.000
144928  2020-01-28 16:15:28.000
144928  2020-01-28 16:15:28.000