使用NEWID()函数的SQL Server特定随机日期

时间:2017-05-29 10:36:35

标签: sql sql-server

我想为我的产品插入特定的开始日期。 它应该在48小时之前和现在之间。

这是我的代码:

CREATE VIEW getNewID AS 
         SELECT         
         DATEADD(MILLISECOND, (ROUND((999 * NEWID()), 0)), 
         DATEADD(SECOND, (ROUND((((DATEDIFF(SECOND, (DATEADD(DAY, -2, GETDATE())),
         (GETDATE())))-1) * NEWID()), 0)), (DATEADD(DAY, -2, GETDATE())))) 
         AS new_id

此视图将返回指定范围之间的随机日期。下面的函数将返回NEWID(),因为SQL不允许我在函数中使用NEWID()

但是,上面的观点会给我一个错误:

  

uniqueidentifier与int不兼容。

如果我使用RAND(),这不会发生,但这会为我插入的所有行提供相同的值(我想将它用于我的转换脚本)。

CREATE FUNCTION randomID()
RETURNS uniqueidentifier
AS BEGIN
   RETURN (SELECT new_id FROM getNewID)
END

也许有些人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

您可以生成0到48 * 60 * 60 * 1000之间的数字(48小时前) 像这样:

abs(checksum(newid())) % (48*60*60*1000)

并使用DATEADD

SELECT dateadd(millisecond, 0 - abs(checksum(newid())) % (48*60*60*1000), getdate())