如何随机选择日期?

5 sql-server random

我在 Bash Shell 脚本中使用此代码来检索随机日期

有没有办法在 Microsoft SQL Server 中做到这一点?

我可以想象,通过单个 SELECT 查询并可能通过调用一些可以轻松执行的函数,不知何故。

Aar*_*and 10

好吧,您真正需要做的就是确定您的日期范围,然后在 0 和天数 (+1) 的增量之间选择一个随机数,然后将这些天数添加到范围的开头。

DECLARE @start DATE = '19700101', @end DATE = SYSDATETIME();

SELECT DATEADD
(
  DAY, 
  (ABS(CHECKSUM(NEWID())) % (DATEDIFF(DAY, @start, @end)+1)), 
  @start
);
Run Code Online (Sandbox Code Playgroud)

您还可以使用其他方法来实现随机性,包括RAND()CRYPT_GEN_RANDOM()。根据我的经验,分布在其中任何一个中都不是特别出色,有些在查询中的行为与其他不同,因此根据您的需要,它们可能足够也可能不够。我跟进了Paul White 的评论,但通过以下查询看到了同样糟糕的分布(当然分布质量也是范围大小的一个因素):

DECLARE @start DATE = '19700101', @end DATE = SYSDATETIME(), @r INT;
SET @r = RAND(CHECKSUM(NEWID())) * (DATEDIFF(DAY, @start, @end)+1);
SELECT DATEADD(DAY, @r, @start);
Run Code Online (Sandbox Code Playgroud)

文档:

  • 感人的。谢谢你回答我的问题。阅读您的文章时,我真的很惊讶。相当广泛的知识库。 (3认同)