我在 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)
文档:
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |