【问题标题】:Random date between two given dates SQL Server 2012两个给定日期之间的随机日期 SQL Server 2012
【发布时间】:2016-02-01 06:03:07
【问题描述】:

我正在尝试遵循

中给出的答案之一

How to insert 1000 random dates between a given range?

并使用以下代码创建函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION RandomDate (@fromDate DATE, @toDate DATE) 
RETURNS DATE
AS 
BEGIN
   declare @days_between int
   declare @days_rand int

   set @days_between = datediff(day,@fromDate,@toDate)
   set @days_rand  = cast(RAND()*10000 as int)  % @days_between

   return dateadd(day, @days_rand, @fromDate)
end

当我尝试创建函数时,出现以下错误:

消息 443,级别 16,状态 1,过程 RandomDate,第 7 行
在函数中无效使用副作用运算符“rand”。

关于如何解决它的任何想法?

谢谢

【问题讨论】:

  • RAND() 函数直接不允许在 UDF 中使用。 blog.sqlauthority.com/2012/11/20/…
  • 必须是 UDF 吗?你不能为此使用存储过程吗?
  • 会不会是调用sp的函数?
  • Sp无法从函数中调用..

标签: sql sql-server sql-server-2012


【解决方案1】:

使用 rand 函数创建视图

  CREATE VIEW randomView
    AS
    SELECT RAND() randomResult
    GO

使用创建的函数中的视图。

 create function RandomDate ( @fromDate date, @toDate date) returns date AS 
BEGIN
 declare @days_between int
 declare @days_rand int

  declare @rndResult int

 select @rndResult=randomResultfrom randomView

 set @days_between = datediff(day,@fromDate,@toDate)
 set @days_rand  = cast(@rndResult*10000 as int)  % @days_between

 return dateadd( day, @days_rand, @fromDate )
end

【讨论】:

  • 会是调用sp的函数吗?出于某种原因,我不想使用视图。
猜你喜欢
  • 1970-01-01
  • 2017-04-22
  • 2017-06-03
  • 2016-03-15
  • 1970-01-01
  • 2014-01-13
  • 2015-03-31
  • 2016-05-16
  • 2015-03-11
相关资源
最近更新 更多