如何获取特定日期的随机日期时间

时间:2018-04-25 09:00:58

标签: sql-server

我正在进行sql查询,我需要获取任何特定日期的日期时间。 为此我使用了以下查询: -

DECLARE @RandomDate datetime

DECLARE @fromDate datetime='2018-04-07'


SELECT @RandomDate= (DATEADD(day, ROUND(DATEDIFF(day, @fromDate, @fromDate) 
* RAND(CHECKSUM(NEWID())), 5),DATEADD(second, CHECKSUM(NEWID()) % 24000, 
@fromDate))) 

SELECT  @RandomDate 

在上面的示例中,我希望获得日期'2018-04-07'的日期时间,即4月7日。但有时它也显示日期为4月6日。怎么解决?

1 个答案:

答案 0 :(得分:4)

CHECKSUM可以返回负值和正值,而%应用于负值会产生负面结果。最后,DATEADD非常乐意在日期中添加负秒数,并且会产生比在日期参数中传递的结果更早的结果。

如果你想要一个严格在0 - 23999范围内的值,那么做两个mod和一个加法:

((valueToConvert % 24000) + 24000) % 24000

(顺便说一下 - 24000看起来像是在这里使用的奇数。一天有86400秒。你的随机时间必须在午夜和早上6:40之间下降吗?)

相关问题