You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取特定日期的随机Datetime?SQL查询偶现日期偏差问题求助

问题原因分析

你的查询偶尔出现前一天日期的问题,根源在CHECKSUM(NEWID()) % 24000这部分:

  • CHECKSUM(NEWID())会生成随机的正负整数,当它为负数时,对24000取模的结果也会是负数(比如-1 % 24000 = -1)
  • 用这个负数秒数执行DATEADD(second, ..., @fromDate),会把日期往前偏移,比如DATEADD(second, -1, '2018-04-07')会得到2018-04-06 23:59:59,看起来就是前一天的日期了。

另外你原查询里DATEDIFF(day, @fromDate, @fromDate)的结果是0,这部分完全可以去掉——0乘以任何随机数还是0,对最终日期偏移没有影响。

修正后的查询

要确保生成的时间偏移始终是非负数,且覆盖一天内的所有时间(一天有86400秒),可以用ABS()函数取绝对值,再对86400取模:

DECLARE @RandomDate datetime 
DECLARE @fromDate datetime='2018-04-07' 
-- 生成0到86399之间的随机秒数,确保不会出现负数偏移
SELECT @RandomDate = DATEADD(second, ABS(CHECKSUM(NEWID())) % 86400, @fromDate)
SELECT @RandomDate

修改后,生成的@RandomDate一定会是2018-04-07当天的任意时间,不会再出现前一天的情况。

如果需要更精确的随机时间(比如到毫秒级别),可以把秒数换成毫秒(一天有86400000毫秒):

DECLARE @RandomDate datetime 
DECLARE @fromDate datetime='2018-04-07' 
SELECT @RandomDate = DATEADD(millisecond, ABS(CHECKSUM(NEWID())) % 86400000, @fromDate)
SELECT @RandomDate

内容的提问来源于stack exchange,提问作者Sunny Sandeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:17:45