Sql 将随机时间戳附加到日期字段,同时从今天的日期中减去天数?

Sql 将随机时间戳附加到日期字段,同时从今天的日期中减去天数?,sql,sql-server,tsql,Sql,Sql Server,Tsql,以下SQL使用getdate()选择今天的日期并附加一个随机时间戳: SELECT DATEADD(SECOND ,RAND(CHECKSUM(NEWID())) * 86400,CONVERT(datetime,CONVERT(varchar(8),GETDATE(),112))) AS DUEDATE FROM [dbo].[Table] as t 生产 2021-02-03 21:11:21.000 2021-02-03 15:51:06.000 2021-02-03 14

以下SQL使用
getdate()
选择今天的日期并附加一个随机时间戳:

SELECT
   DATEADD(SECOND ,RAND(CHECKSUM(NEWID())) * 86400,CONVERT(datetime,CONVERT(varchar(8),GETDATE(),112))) 
   AS DUEDATE
FROM [dbo].[Table] as t
生产

2021-02-03 21:11:21.000
2021-02-03 15:51:06.000
2021-02-03 14:08:24.000
2021-02-03 16:10:50.000
2021-02-03 02:56:00.000
此SQL使用
getdate()
获取今天的日期,并从
t.daysago
(例如,g 1,2,3,4,5等)中减去值以生成过去的日期(例如,今天的日期-5天)

它生成这些降序日期,但每行都有相同的时间戳

2021-02-02 12:38:09.133
2021-02-01 12:38:09.133
2021-01-30 12:38:09.133
2021-01-29 12:38:09.133
2021-01-28 12:38:09.133
我需要改变时间戳,使我的演示仪表板中的数据看起来逼真

我试图将这两种方法结合起来,但遇到了麻烦。我想使用
getdate()
生成今天的日期,然后从今天的日期中减去
t.daysago
中的值,然后随机化时间戳

如果今天的日期和当前时间是2021-02-03 22:11:31.000,我想得出以下结果(通过减去
t.daysago
(1,2,3,4,5)中的值):

我似乎不知道如何组合这些方法以获得所需的输出。有什么建议吗?

您可以使用
rand()
添加一些随机时间,如下所示:

select 
    (Dateadd(day, -t.daysago, dateadd(minute,round(rand()*rand()*25,0),Getdate())))   
FROM [dbo].[Table] as t
您可以使用
rand()
添加一些随机时间,如下所示:

select 
    (Dateadd(day, -t.daysago, dateadd(minute,round(rand()*rand()*25,0),Getdate())))   
FROM [dbo].[Table] as t

您仍然可以使用上面的逻辑进行一些更改,您可以选择
SECOND
或使用
number
param for DATEADD以缩小或扩大范围:

SELECT
   DATEADD(MILLISECOND ,CHECKSUM(NEWID()) ,GETDATE())    AS DUEDATE
FROM [dbo].[Table] as t
例如,如果希望控制范围(例如5天内的日期)从特定日期开始:

您可以根据需要声明@startdate

DECLARE @dayrange int = 5

SELECT
   DATEADD(SECOND ,RAND(CHECKSUM(NEWID())) * 86400,CONVERT(datetime,CONVERT(varchar(8),DATEADD(DAY, - t.daysago ,GETDATE(),112))) 
   AS DUEDATE
FROM [dbo].[Table] as t

您仍然可以使用上面的逻辑进行一些更改,您可以选择
SECOND
或使用
number
param for DATEADD以缩小或扩大范围:

SELECT
   DATEADD(MILLISECOND ,CHECKSUM(NEWID()) ,GETDATE())    AS DUEDATE
FROM [dbo].[Table] as t
例如,如果希望控制范围(例如5天内的日期)从特定日期开始:

您可以根据需要声明@startdate

DECLARE @dayrange int = 5

SELECT
   DATEADD(SECOND ,RAND(CHECKSUM(NEWID())) * 86400,CONVERT(datetime,CONVERT(varchar(8),DATEADD(DAY, - t.daysago ,GETDATE(),112))) 
   AS DUEDATE
FROM [dbo].[Table] as t


显示您尝试将它们组合在一起的情况。这很难看,但是:选择DATEADD(秒,RAND(校验和(NEWID())*86400,将Datetime(day,-ts.daysago,Getdate())转换为来自[dbo]的DueDate。[TaskSummary]将其放入您的问题中。并解释什么不起作用。将尝试。它甚至不起作用。向我们展示您将它们结合起来的尝试。这很难看,但是:选择DATEADD(SECOND,RAND(CHECKSUM(NEWID())*86400,将Datetime(day,-ts.daysago,Getdate())转换为来自[dbo]的DueDate。[TaskSummary]当它进入你的问题时。并解释什么不起作用。我会尝试。它甚至不起作用。这不是随机化时间戳。试图找出它,因为它看起来很接近。输出是
2021-01-17 13:25:17.327 2021-01-18 13:25:17.327 2021-01-19 13:25:17.327 2021-01-20 13:25:17.327 2021-01-21:25:17.327t将时间戳随机化,。试图在它看起来很接近时找出它。输出是
2021-01-17 13:25:17.327 2021-01-18 13:25:17.327 2021-01-19 13:25:17.327 2021-01-20 13:25:17.327 2021-01-21 13:25:17.327
我不确定是否明白。我需要将@dayrange逻辑替换为“getdate()-t.daysago'。正在尝试。这不太有效
DATEADD(第二,RAND(校验和(NEWID())*86400*-t.daysago+3,CONVERT(datetime,CONVERT(varchar(8),GETDATE(),112)))作为DueDate,
当它生成随机日期时,它似乎是
2021-01-27 19:06:01.000 2021-02-02:04:39.000 2021-02-02 10:53:21.000 2021-01-14 00:43:07.000 2021-01-14 10:48:51.000
是的。我正在处理这个问题。我需要使用我的t.daysago列中的值,然后减去getdate()代替@StartDate。感谢您的帮助。我收到了他的错误:
Msg 102,15级,State 1,第131行“days”附近的语法不正确。
我尝试每天更改,但也不喜欢。我不确定我是否理解您的意思。我需要用“getdate()-t.daysago”替换@dayrange逻辑。尝试。这不太有效
DATEADD(第二,RAND(校验和(NEWID())*86400*-t.daysago+3,CONVERT(datetime,CONVERT(varchar(8),GETDATE(),112)))作为DueDate,
当它生成随机日期时,它似乎是
2021-01-27 19:06:01.000 2021-02-02:04:39.000 2021-02-02 10:53:21.000 2021-01-14 00:43:07.000 2021-01-14 10:48:51.000
是的。我正在处理这个问题。我需要使用我的t.daysago列中的值,然后减去getdate()而不是@StartDate。感谢您的帮助。我收到了他的错误:
Msg 102,15级,State 1,第131行“days”附近的语法不正确。
我尝试每天更改,但也不喜欢这样。