我正在进行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日。怎么解决?
答案 0 :(得分:4)
CHECKSUM
可以返回负值和正值,而%
应用于负值会产生负面结果。最后,DATEADD
非常乐意在日期中添加负秒数,并且会产生比在日期参数中传递的结果更早的结果。
如果你想要一个严格在0 - 23999范围内的值,那么做两个mod和一个加法:
((valueToConvert % 24000) + 24000) % 24000
(顺便说一下 - 24000看起来像是在这里使用的奇数。一天有86400秒。你的随机时间必须在午夜和早上6:40之间下降吗?)